{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from __future__ import division, print_function, unicode_literals\n",
    "\n",
    "# Common imports\n",
    "import numpy as np\n",
    "import os\n",
    "\n",
    "# to make this notebook's output stable across runs\n",
    "np.random.seed(42)\n",
    "\n",
    "# To plot pretty figures\n",
    "%matplotlib inline\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "mpl.rc('axes', labelsize=14)\n",
    "mpl.rc('xtick', labelsize=12)\n",
    "mpl.rc('ytick', labelsize=12)\n",
    "\n",
    "# Where to save the figures\n",
    "PROJECT_ROOT_DIR = \".\"\n",
    "CHAPTER_ID = \"svm\"\n",
    "\n",
    "def save_fig(fig_id, tight_layout=True):\n",
    "    path = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID, fig_id + \".png\")\n",
    "    print(\"Saving figure\", fig_id)\n",
    "    if tight_layout:\n",
    "        plt.tight_layout()\n",
    "    plt.savefig(path, format='png', dpi=300)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SVC(C=inf, cache_size=200, class_weight=None, coef0=0.0,\n",
       "  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
       "  kernel='linear', max_iter=-1, probability=False, random_state=None,\n",
       "  shrinking=True, tol=0.001, verbose=False)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sklearn import datasets\n",
    "\n",
    "iris = datasets.load_iris()\n",
    "X = iris['data'][:, (2, 3)]\n",
    "y = iris['target']\n",
    "\n",
    "setosa_or_versicolor = (y == 0) | (y == 1)\n",
    "X = X[setosa_or_versicolor]\n",
    "y = y[setosa_or_versicolor]\n",
    "\n",
    "svm_clf = SVC(kernel='linear', C=float('inf'))\n",
    "svm_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZkAAAEXCAYAAAB/HzlmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3X+QHOV95/H3V6yNVFpzJdmqlR2X8FFGJpAgKMjlyga0G1fMOYSDEqTKgAlUmQhQUQYTLmc4VMiIS2JiTLCjo4AChOyDQmXLNgFCiF27CCLq7sQJjMX5dDY+cVgrDBIWWsWWWOl7f8ysPJrtmZ0f/XQ/3f15VXVpp+eZ6a96Zvrbz49+2twdERGREGblHYCIiJSXkoyIiASjJCMiIsEoyYiISDBKMiIiEoySjIiIBKMkIyIiwUSRZMzsGjPbbGb7zWxtm3KXm9lBM5toWIazi1RERLoxkHcAdTuA24CzgTkzlH3e3c8IH5KIiPQriiTj7hsAzOx04MM5hyMiIimJIsl06VQzewvYDXwD+Ct3n0wqaGbLgeUAs2fPPm3RokXZRdmjQ4cOMWtWFK2YbSnO9BQhRlCcaStKnNu2bXvL3Rf0/AbuHs1CrclsbZvnjwP+NbW+pN8FXgFu7OS9Fy9e7EUwOjqadwgdUZzpKUKM7oozbUWJE9jsfRzX40+jDdz9VXf/mbsfcveXgVuBC/OOS0REkhUqySRwwPIOQkREkkWRZMxswMxmA0cBR5nZbDOb1l9kZp82s6H63ycAK4HvZRutiIh0KookA9wM/Ar4IvDZ+t83m9mi+rUwUz32nwR+aGb7gCeBDcBf5hGwiIjMLIrRZe6+CljV4unBhnI3ADdkEJKIiKQglpqMiIiUkJKMiIgEoyQjIiLBKMmIiEgwSjIiIhKMkoyIiASjJCMiIsEoyYiISDBKMiIiEoySjIiIBKMkI1FauBDMpi8LF+YdmYh0Q0lGovTGG92tF5E4KcmIiEgwSjIiIhKMkoyIiASjJCMiIsEoyUiUhoa6Wy8icYrizpgizXbuzDsCEUmDajIiIhKMkoyIiASjJCMiIsEoyYiISDBKMlJ5midNJBwlGak8zZMmEo6SjIiIBKMkIyIiwSjJiIhIMEoyIiISjJKMVJ7mSRMJR3OXSeVpnjSRcFSTERGRYJRkRPqgCzlF2lOSkSgU9WCtCzlF2lOSkSjoYC1STlEkGTO7xsw2m9l+M1s7Q9kvmNlOM9tjZg+Y2dEZhSkiIl2KIskAO4DbgAfaFTKzs4EvAp8EPgIcB3wpdHAiItKbKJKMu29w9+8Cu2Yoehlwv7tvdfe3gdXA5aHjExGR3pi75x3DYWZ2G/Bhd7+8xfMvAX/p7o/WH38AeBP4gLtPS1BmthxYDrBgwYLT1q9fHyr01ExMTDA4OJh3GDNKO86RkeGWz42OjvX8vqH357JlH+ftt987bf28eQfYsGFTR+9R1c88FMWZrpGRkRfc/fSe38Ddo1moNZmtbfP8T4F/1/D4PYADH5npvRcvXuxFMDo6mncIHek3zqEhd5h5GRrKN85+tPo/Nv+fqvKZZ0VxpgvY7H0c16NoLuvCBHBMw+Opv/fmEIv0od2oscZDcpGvxu9nxFxRh3SLNCtaktkKLGl4vAR4wxOayqQ6ynhA1pBuKYsokoyZDZjZbOAo4Cgzm21mSfOqrQM+Z2Ynmtk84GZgbYahlkqWB+fmbaUp5AG5jAlMJEtRJBlqyeJX1IYnf7b+981mtsjMJsxsEYC7PwXcDowC2+vLLfmEXHxZni0X9QxcNQqR/kQxC7O7rwJWtXj6iOEX7v5V4KuBQxIRkRTEUpORAgrVlFSWpijdp0YkkpqMFFOopqSyNEX1MzJuaCh5PyhBSdGoJlNBUzWQsihjjWHnzuQrh4o8pFuqSUmmgmaqKYQ4OIc84Ic8IIdOYAsX1mY70Ag2KSs1l8kRQs0yNHXAX7iwWM1hoWsO7fZFkfaTSCuqyUimdOAUqRYlGTlCN001oZqSityXIiJHUnOZJOqkxpF2U1LaTXW1prnhaeuHhtSB3qxVM6b2lfRLNZkKqkpNQVfrd077SkJRkqmgxtFYkq92Cb8qJwNSbkoykqkyXtPSrJuZEHburN2UTdfESFmpT0YyVfYDZ7sh2mp6kipSTabiYqxZFHl6fSUSkSMpyVTU1IG8+aA4NJR/U01aNYE0EmiRE143YjzZkHJQkqmodgfyshxAW/V3dJNAq9L0pbnSJBQlGZmmbAfQmYzvHWfp2qXsnKjOEbUqNTTJn5KMVN7qjat57rXnWP3M6qDbSWp6ajVBZuiDfVVqaJI/JRmptPG94zz44oMc8kM8+OKDfddm2vVtJDU96WAvZackI9HJshN69cbVHPJDABz0g33XZtS3IXIkJZmKinnUUFYH6qlazIGDBwA4cPDAtNpMqIRXthvHVV0V+/U6pSRTUTt3athqYy1mSnNtJlTCy7o5rLmjX9KVVb9eESnJVFjVm3aef/35w7WYKQcOHmDT65tyiiicTpNaVU4w0pR2v17ZaFoZqawtV27JO4SWsjzYa6LU/iT16605Z03OUcVDNRmRyFSpNll0nfTrVZ2SjIhIjzrp16s6JRmRHFR90EVZVKlfr1fqkxHJQWNz2NjYGMPDw0G3NzTU+vbK0ruY+/VioSQjUgHq45G8qLlMRESCUZIREZFglGRERCQYJRmREtD9YSRWSjIiJaBbBkisokkyZjbfzL5jZvvMbLuZXdyi3Coze9fMJhqW47KOV4qncaZczZorko2YhjCvAQ4AQ8ApwBNm9pK7b00o+6i7fzbT6KTwGmfKdfzw35pnSiScKGoyZjYXuABY6e4T7v4c8Bhwab6R9U5t5HFpnCn3gRcf4IEtD2jWXJEMmEcwBauZnQpscvc5DetuAJa6+7lNZVcBXwAOAuPA37n73S3edzmwHGDBggWnrV+/Psx/IMHIyHDL50ZHx1o+NzExweDgIMuWfZy3337vtOfnzTvAhg35T1kxFWfspuK8c9udPLnzSSZ9EqN2QxXHGbABzvngOVx3/HW5x9iPXr9v3SjaZx67osQ5MjLygruf3vMbuHvuC3AmsLNp3Z8BYwllTwQ+BBwFfJxaorlopm0sXrzYs5R8p5ba0s7o6Ghfr8/KVJyx2PHODj/rwbN8fO/4EetHR0d9xzs7fPZts51VJC5zbpsz7XVZSmNfDg0lf1eGhvqPb0psn3krijNdwGbv4/geRXMZMAEc07TuGGBvc0F3f8Xdd7j7QXffBNwFXJhBjFFSs1xNuzsTJs2U26gMs+ZW/QZ0Eq9Yksw2YMDMjm9YtwRI6vRv5kBlbyjbbuhqVRLOTHcmTJopt5FmzRUJJ4rRZe6+z8w2ALea2RXURpedR6057Ahmdh6wEfgl8HvA54GbMgy3cMp+rcRMdybUTLki+YmlJgOwApgD/AJ4BLja3bea2ZlmNtFQ7jPAT6g1pa0DvuzuD2Ue7Qx0v5Bs6M6EInHrOMmY2dNm5ma2rGm9mdna+nN/3Wsg7r7b3c9397nuvsjdH66vf9bdBxvKXeTu73f3QXc/wd2/1us2Q+q3jVxJqjO6M6FI3LqpyfwH4BBwm5kd1bD+K8BlwH3u/sU0g6sydeR2RncmFIlbx30y7v6SmX2DWkK5FFhrZjcB1wPrgavChCjttLrjYVWov6UYFi5sfWdOnTiVW7d9MjcDvwZWmdk1wH8G/hG41L3NGFEJprHGoyY2iZUm8CTK+fKyiKmrJOPurwN/CxwLfB3YBCxz9yPaK8zsRjP7H2b2jpm9aWZ/b2a/k1rUJdDq+pZly6YNqOuYmtgkhKnv6sjIcKWvxepXu2u58pJFTL2MLnuz4e/Pufu/JJQZBv4LtSHIfwBMAt83s/k9bK+UWp3BJU0lI9Kvfi7aVS2kfzNdy5VUPnQNo9uYetVVkjGzi6h19E9Fc21SOXc/290fdPcfufvL1PpwFgCf6CdYEUk2UxJRoshX0rVcM5UPXcPoNqZedTOE+Y+Ah6hdhX8y8GPgCjM7oYOXv6++rbd7CVJE2lMSiVera7l2H9jdtnzIGkaW15d1lGTM7AzgW8DrwKfc/U1gJbXRaZ1cG3MX8CLwfI9xikiBVXlQSqtrudZtXzdj+VA1jCyvL5sxyZjZEuBxYA/wh+4+DuDu3wI2A+eZ2ZltXv9V4AzgAnc/mErUIlIoVR6U0uparq17pk/NmFUNI8vry9peJ2NmH6U2RNmBs939p01FbgT+Cfgb4N8mvP5OatPAjLj7q6lEXBKtrm+ZN+8AoM5/iUer72oVaiFpmLqWa8UTK7jnhXu46rSrWHPOGsbGxqaVbVfDSPMOrlleX9a2JuPuP3H3he4+z91/mPD8993d3D0pwdwFXAz8gbv/OL2Qy6HVmV0MNyQruhivR8hbP81VU9/V0dGxytVC0tJpP0sZZ7AIMguzma2hNqLsfOBtM5saKDnh7hOtXynSv8aROX8y90/yDicTM9U2lBDyldTPkvTdLOMMFqFmYV5BbUTZD6jduXJquSHQ9kSA6WeMrUbwlE2V+zxi1+3osrIJkmTqTWhJy6oQ24uZ7lyZreYzxlYjeESy0u3osrKJ6X4ypaTrF7KTdMb41M6n1DcjuepmdFkZRXFnTJE0ZDUyR5JppuVkrfpZkkaXlZFqMlIaSWeMkz5Z6JE5RaJauyRRTUZKI+mMcWxsjOHh4eyDERFANRkREQlISSawKs/ZJCKi5rLAqtzhKSKimkzJ6TodyYpq7ZJESabkqjDiR3OVtZfViYZmHZAkSjJSeDHeOz0mVTjRkHgpyWRMzVfpyuo+5SLSGyWZjOmsMl1Z3adcRHqjJCOFleV9ykVCqEJ/opJMyZV5xE+W9ymXYov1YF6F/kQlmQ5l2ZeS5rbKPOKnjHcRDKHMJxqdivFgvmv/rkr0J+pizA5l2ZeifpvOlPEugiGU4YSiH82DQ1YuXcnCwfxH2qzbvm5af2IZZwtXTSZjOqsUyVaMg0PG947z1BtPVaI/UUkmY2VuvhKJTayDQ6rUn6gkIyK5yKKfM9aD+fOvP8+kTx6x7sDBAzyz/ZmcIgpHSUakB7GOViqSLPoeYx0csuXKLYwuHcVvcfwW5+rTr2aWzWLpsUtzjSuEaJKMmc03s++Y2T4z225mF7coZ2b2ZTPbVV9uNzMLHV+WfSnqt4lfP6OVlKCys+XKLYcP5I1LTINGyj5rRTRJBlgDHACGgEuAu83spIRyy4HzgSXAycAfA1eGDi7LvhT128St34NCjMNpJT8xDkxIUxRJxszmAhcAK919wt2fAx4DLk0ofhlwh7u/7u4/B+4ALs8sWKm8fg4KZT9rle7EOjAhTebueceAmZ0KbHL3OQ3rbgCWuvu5TWX3AJ9y9/9Wf3w6MOru70t43+XUaj4sWLDgtPXr1wf8X6RjYmKCwcHBvMOYUVXj3LV/Fxf/94s5cOg37fxHzzqah3//Yea/d/6Mr79z2508ufNJJn2SARvgnA+ewxUfvKKS+3JkZLjlc6OjYz2/b5G+m/ftuO/w92HK1PfiuuOvyzG63xgZGXnB3U/v9fWxXIw5COxpWrcHmJY4EsruAQbNzLwpY7r7vcC9AB/72Md8eHg4tYBDGRsbQ3GmJ+04VzyxApp6AN2cH7z7A9Z8qv2FdON7x3n6n58+fECZ9Eme/sXT/Omxf1rJfTk0lNzJPzREX9vpJs7xveN85tuf4dELH03lAs1u3m9sbIzX/LVpo8wmfZLth7YX4jvRiSiay4AJ4JimdccAezsoewww0ZxgRMb3jnPti9em2vTQz2ilVsNp121fl1p8RRJD32Pa/WPdvl8RBib0K5Yksw0YMLPjG9YtAbYmlN1af26mclJxqzeu5uU9L6c6Aqyfg0KrBLV1j76+eUi7f0z9bcmiSDLuvg/YANxqZnPN7BPAecA3EoqvA643s98ysw8Bfw6szSxYKYSpH7zj0YwAa5Wg7jv9vtS2IZ1Le1RX2UeJ9SqKJFO3ApgD/AJ4BLja3bea2ZlmNtFQ7h7g74GXgR8BT9TXiRymEWDSTtqjuqowSqxX0SQZd9/t7ue7+1x3X+TuD9fXP+vugw3l3N3/wt3n15e/UH+MNOr3B5/2GakuvozL+N5xTrv3tGn9Y5OHJnv+rGOdviYG0SQZkbT084MPcUaqiy/jsnrjasYnxqf1j7176N2ep5uJdfqaGCjJSOmEGAHWa4KItekty5vwxWTq8wCYMzCHF698kdkDsw8//odL/qGn963CKLFeKclI6TT+4BsnIexnBFivZ6SxdgZX9cZ4zZ/HJRsuifLzKZNYLsYUiUKaZ56tmt5iuTNj1SR9Hlvf/M3wcX0+YagmI6USUye7OoPjkvR5NOun8z8vMX3nkyjJRKCxfXxkZLgy7eMhpNXJnsYPV53BcUn6PJr10/mfl9gHlqi5LAJVbR9PW3Mn+8qlK3t+r8Yf7ppz2s9J1oo6fePS6vMY3zvOcV87jl9P/rqvzv+050HrdJvN3/nYmvpUk5HSSKuTPdYRYWnSjfF+I63vTR41ilgHljRSkpFSaNXJvvvA7q7fqwg/3H7FMDllJ0L3N6R1XVQeJyZFmWVASUZKIa0Zjovyw62K0LWDtAZn5HFiUpSBJUoyUgppzXBclB9uFWRRO0hjcEZeJyZFGViijv8ItLt5k3SmVafu2NhYV+9TlB9ut/LolO5XUu2g10EYraQxOKPdiUna8TYqysASJZkINLaDF+WOk2VVlB9ut9IYLZelIl3IWtYTk7QoyYiUXBGGuTbLq3bQi7KemKRFfTIiM4j9iuqZFHG0nGoH5aGajMgMitbU1KhIzU6NVDsoD9VkRNoo+oWZGi0neVOSEWmjiE1NjdTsJHlTc5lIC0VtampUtmanIg7FrjrVZERaUFNTfGKfcVimU5IRaUFNTXEpev9YVam5TKSFsjU1ZSlEs1YWMwBI+lSTESmZGK7rSbtZSxOXFpeSjEjJdHuATzsphWjWUv9YcSnJiBRUUnLo5QCfdq0jxLBv9Y8Vl5KMSEElJYduD/Bp1zpCNWttuXILfotPW7rtN4uhKbFqlGREmnR7IMrjwJWUHHo5wKdd64i9WUtDoLOnJCPSpNsDUSz3du/2AB+i1tFrs1YWiVpDoPOhJCPSoNsDUUz3dt+4fWNXB/gQtY5em7WySNRFnyKoqJRkRBp0eiCaOvO+8Qc3RnNv96XHLu3qAB9LZ3qnibqf2o6GQOdHSUakrpsD0eqNq3l2+7N884ffLOy93dPqTO9Xp4m9n9pO7H1FZaYkI1LX6YFoKhk5zkE/OGP5tMWSHNLQaWLvt1kyllpbFWlaGZG6Tg9EScmoXXlprdPbLPc7pUwRE3BZRJFkzGw+cD/wKeAt4EZ3f7hF2VXAfwL2N6w+2d1fDR2nlFsnB6LmM2+AOQNzePXaVzX1fA86SewhbrnQ79xquuVA52JpLlsDHACGgEuAu83spDblH3X3wYZFCUYyobb9dHXS9Bdin/c7mk3X23Qu9yRjZnOBC4CV7j7h7s8BjwGX5huZyHRq289e2vu83/4dXW/THXP3fAMwOxXY5O5zGtbdACx193MTyq8CvgAcBMaBv3P3u1u893JgOcCCBQtOW79+ffr/gZRNTEwwODiYdxgzUpzpKUKMkBznrv27uPV/3cotJ97C/PfOzymyI820P+/cdidP7nySSZ9kwAY454PncN3x13X8/v2+vtM4YzEyMvKCu5/e8xu4e64LcCaws2ndnwFjLcqfCHwIOAr4OLVEc9FM21m8eLEXwejoaN4hdERxpqefGHe8s8PPevAsH987nl5ALYyOjk7b3tWPX+2zvjTLVzy+Ivj2O9Vuf+54Z4fPvm22s4rDy5zb5nS8//p9fadxxgTY7H0c44M3l5nZmJl5i+U5YAI4pullxwB7k97P3V9x9x3uftDdNwF3AReG/V+IxCnrvoHG7RWx2ajf/h31yXUveJJx92F3txbLGcA2YMDMjm942RJga6ebACztuEVil/VBftf+XUdsL4/ZDvrVb/+O+uS6l/sQZnffZ2YbgFvN7ArgFOA8ak1h05jZecBG4JfA7wGfB27KKFyRtrIc2pr17YjXbV93xPa++cNvHr4YNY1hxVno93oZXW/TvdxHl9WtAOYAvwAeAa52960AZnammU00lP0M8BNqzWnrgC+7+0MZxyuSKKvmq6zn4hrfO85Tbzx1xPbymO1AiieKJOPuu939fHef6+6LvOFCTHd/1t0HGx5f5O7v99r1MSe4+9fyiVrkSFk2X2XdN9BuloMpajaSJLk3l4mURZbNV636Bp7Z/kyw7U365LT1pyw8RU1I0paSjEgKQkx90k7zgX3FEyu454V7WHrs0tS3NbW9sbExhoeHg7y/lFcUzWUiRZfn0NYiDiWW6lCSEUlBnkNby3LHxyxuwSzZU3OZSAry6pfIupkupMaReSGHYku2VJMRKbCyXIGuJr/yUpIRKbCyXIFeliY/mU7NZSIFVobhw2Vq8pPpVJMRkVyVpclPkinJiEiuytLkJ8nUXCYiuSpDk5+0ppqMiIgEoyQjIiLBKMmIiEgwSjIiIhKMkoyIiASjJCMiIsEoyYiISDBKMiIiEoySjIiIBKMkIyIiwSjJiIhIMEoyIiISjJKMiIgEoyQjIiLBKMmIiEgwSjIiIhKMkoyIiASjJCMiIsEoyYiISDBKMiIiEoySjIiIBKMkIyIiwSjJiIhIMLknGTO7xsw2m9l+M1vbQfkvmNlOM9tjZg+Y2dEZhCkiIj3IPckAO4DbgAdmKmhmZwNfBD4JfAQ4DvhSyOBERKR3uScZd9/g7t8FdnVQ/DLgfnff6u5vA6uBy0PGJyIivRvIO4AunQR8r+HxS8CQmb3f3aclKTNbDiyvP9xvZj/KIMZ+fQB4K+8gOqA401OEGEFxpq0ocX6snxcXLckMAnsaHk/9/T4SakLufi9wL4CZbXb304NH2CfFma4ixFmEGEFxpq1Icfbz+qDNZWY2ZmbeYnmuh7ecAI5peDz1997+oxURkbQFrcm4+3DKb7kVWAKsrz9eAryR1FQmIiL5y73j38wGzGw2cBRwlJnNNrNWyW8d8DkzO9HM5gE3A2s73NS9/UebCcWZriLEWYQYQXGmrRJxmrunFUhvAZitAm5pWv0ld19lZouAV4AT3f21evnrgf8IzAG+DVzl7vszDFlERDqUe5IREZHyyr25TEREyktJRkREgiltkulmTjQzu9zMDprZRMMyHFuc9fK5zN1mZvPN7Dtmts/MtpvZxW3KrjKzd5v253F5xmU1XzazXfXldjOzEDH1GWdm+y5h2938ZnKbQ7DTOHP+XR9tZvfXP+u9ZrbFzD7dpnxev+uO4+x1f5Y2ydDFnGh1z7v7YMMyFi60IxRl7rY1wAFgCLgEuNvMTmpT/tGm/flqznEtB86nNuz9ZOCPgSsDxZSkm/2X1b5r1tF3MefvIXT3287rdz0A/D9gKfCvgJXAejP7SHPBnPdnx3HWdb0/S5tkupwTLTdFmLvNzOYCFwAr3X3C3Z8DHgMuDb3tFOO6DLjD3V93958Dd5DRvHex7r9mXXwXc51DsAi/bXff5+6r3P3/uvshd38c+BlwWkLx3PZnl3H2pLRJpgenmtlbZrbNzFa2uVYnTydRm69tyuG52wJvdzFw0N23NW27XU3mXDPbbWZbzezqCOJK2nft4k9Tt/svi33Xj7y+h72I4ndtZkPUvgdbE56OZn/OECf0sD9jPJDmYSPwO8B2ah/4o8Ak8Fd5BpWgq7nbAm53atvva1F+PbULuN4Afh/4tpn90t0fyTGupH03aGbm4cfxdxNnVvuuH3l9D7sVxe/azN4D/FfgIXf/cUKRKPZnB3H2tD8LWZOxlOdEc/dX3f1n9eriy8CtwIWxxUmguds6iLN5u1PbTtyuu7/i7jvc/aC7bwLuIoX9maCbuJL23UQGCSZp21PbnxZnhvuuH4WYQzDU77obZjYL+Aa1/rhrWhTLfX92Emev+7OQScbdh93dWixnpLEJoO+RRwHinJq7bUoqc7d1EOc2YMDMjm/adqsq9bRNkML+TNBNXEn7rtP4+9XP/gu17/oR5HuYgUz3ZX304v3UBntc4O7vtiia6/7sIs5mHe3PQiaZTlgXc6KZ2afrbZGY2QnURlh8L6lsnnHS39xtPXP3fcAG4FYzm2tmnwDOo3bmM42ZnWdm86zm3wCfJ8D+7DKudcD1ZvZbZvYh4M/JYN91G2dW+y5JF9/FXL6H3caZ5++67m7gt4Fz3f1Xbcrluj/pMM6e96e7l3IBVlHLtI3Lqvpzi6hVURfVH3+FWhv4PuBVatXA98QWZ33d9fVY3wEeBI7OKM75wHfr++g14OKG586k1vQ09fgRam3JE8CPgc9nHVdCTAbcDuyuL7dTn1Ypz/2X577r9LsY0/ewmzhz/l0fW4/r1/WYppZLYtqf3cTZ6/7U3GUiIhJMaZvLREQkf0oyIiISjJKMiIgEoyQjIiLBKMmIiEgwSjIiIhKMkoyIiASjJCMiIsEoyYgEZmZP1ycbXda03sxsbf25v84rPpGQdMW/SGBmtgT4n8D/Bn7X3Q/W199BbTqR+9x9eY4higSjmoxIYO7+ErXJMH+b+t0wzewmaglmPXBVftGJhKWajEgGzOzDwP+hNsHgV4CvA/8I/Ht3P5BnbCIhqSYjkgF3fx34W2qz3n4d2AQsa04wZnaWmT1mZj+v99Vcnn20IulRkhHJzpsNf3/O3f8locwg8CPgWqDdPUhECkFJRiQDZnYRtWaynfVV1yaVc/cn3f0md/8WcCir+ERCUZIRCczM/gh4iNptdk+mdjOyK+p3FxQpNSUZkYDM7AzgW8DrwKfc/U1qt60dAHRtjJSekoxIIPXrYx4H9gB/6O7jAPWmsM3AeWZ2Zo4higSnJCMSgJl9lNoQZQfOdvefNhW5sf7v32QamEjGBvIOQKSM3P0nwMI2z38fsOwiEsmHkoxIRMxsEPho/eEsYJGZnQLsdvfX8otMpDe64l8kImY2DIwmPPWQu1+ebTQi/VOSERGRYNTxLyIiwSjJiIhIMEoyIiISjJKMiIgEoyQjIiKzg05kAAAAGUlEQVTBKMmIiEgwSjIiIhKMkoyIiATz/wHSdWEix6P7kwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import make_moons\n",
    "X, y = make_moons(n_samples=100, noise=0.15, random_state=42)\n",
    "\n",
    "def plot_dataset(X, y, axes):\n",
    "    plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"bs\")\n",
    "    plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"g^\")\n",
    "    plt.axis(axes)\n",
    "    plt.grid(True, which='both')\n",
    "    plt.xlabel(r\"$x_1$\", fontsize=20)\n",
    "    plt.ylabel(r\"$x_2$\", fontsize=20, rotation=0)\n",
    "\n",
    "plot_dataset(X, y, [-1.5, 2.5, -1, 1.5])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:931: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('poly_features', PolynomialFeatures(degree=3, include_bias=True, interaction_only=False)), ('scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('svm_clf', LinearSVC(C=10, class_weight=None, dual=True, fit_intercept=True,\n",
       "     intercept_scaling=1, loss='hinge', max_iter=1000, multi_class='ovr',\n",
       "     penalty='l2', random_state=42, tol=0.0001, verbose=0))])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import PolynomialFeatures, StandardScaler\n",
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "polynomial_svm_clf = Pipeline([\n",
    "    ('poly_features', PolynomialFeatures(degree=3)),\n",
    "    ('scaler', StandardScaler()),\n",
    "    ('svm_clf', LinearSVC(C=10, loss='hinge', random_state=42))\n",
    "])\n",
    "\n",
    "polynomial_svm_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure moons_polynomial_svc_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xt0nPV95/H3V5JlaSwZybJsx3fAwgabGLeh5TgGO/FmXXdLnCbsbusmC5x22dDlJKfZsJv0hFNCspttGrotTRbKboMJG1MIwQRo0sYohhqctibYjjG+CLAt+SaPR7ItWZJH0vz2j5mRR6OZ0Vye+/N9naMDmnlm5uvH4/nM7/f8LmKMQSmllPKaKrcLUEoppXLRgFJKKeVJGlBKKaU8SQNKKaWUJ2lAKaWU8iQNKKWUUp6kAaWUUsqTPBFQInKfiLwpIpdFZEuB4+4SkVER6c/4WedcpUoppZxS43YBKaeArwMbgPpJjv25MWaN/SUppZRykycCyhjzPICIfAiY73I5SimlPMATAVWiVSJyDugBngK+YYwZyXWgiNwD3ANQV1f3q/PnLRy7z5Bc4kkQu+stiyGBlNwD696yVQbj2XOZzU+1gtv1jn9PFVOHnl/7ZNdqjIFEAiFBohpEqhDxzp+lo+O9c8aY1nIf77eA+kdgBXAcWA48A4wA38h1sDHmceBxgLYlS83//fZbDMQGx+5vbqm2u96yxeJv0VL7K5MeNxK7MO73SEudXSUVdCb+NnNqV7jy2qXyU63gXL0Si+a8vbZleknP0xU/zILapVaU5Ag/1ZtZa7R9P3VdOzixcB/1N80lsuJmZjW1uVzheCsWbTxeyeN9FVDGmPczft0vIg8B95MnoMY9FjMWTl4OpmJ4JZSUP1kVRMo96XCKLT/I9KVLmXfL7W6XZAtfBVQOBopvm/s5mDSUVCnyhRBoEAXFwuWNXFx6dWDDCTwSUCJSQ7KWaqBaROqAkexrSyKyEXjLGNMtIsuAB4AfFPUaPuljzqShpAopFEKgQRR0ZqCPkZaI22XYyhMBBXwF+JOM3z8NfFVEvgu8A9xgjOkE1gNbRKQB6Ab+H/A/nC7WbiOxC5j6UUBDKewkFkXqh5E+7ZZTV1QPxqDR7Srs54mAMsY8CDyY5+6GjOO+CHzRgZIcl9lairTUcTFepeEUAsW0giRerUGkJpDGCDDkdhm28kRAhVl2MKlg0W44ZaWRoVGGvr+FSw2H2N04yBS8NWrPahpQLtBQCg4NIOWUaPt+qpb1cHTRTupvmsv0Fas9N6zcahpQDtJg8h8NIOUFsY5eFnOUg3UNRDasYlHberdLcoQGlM00lLxPQ0j5gRm8gNRcRV3rwskPDggNKJtoMHlLZgjlGhWnIaS8KtbRy7TXf8Tlad1cnjKfqW4X5CANKItpMLmrmAmqOipO+UV6xYiji5LLGVXVR5jVNMftshyjAWURDSZn6XI9KuhyLWfUdSjudlmO0oCqkAaTvTSIVJiFYTmjQjSgypQOJg0l62gYKTVeGJYzKkQDqkQaTNbQMFKqsLAsZ1SIBlSRtCuvMrkCqdQwWrt5PrHeiSvStzSP8trWE2XXppRXhWE5o0I0oCahwVQ6K8Iol1zhVOh2pfwoPax8qOqX7F46GvjljArRgMpDg6l4uVbc1q46pUqXPax8ugd3yXWSBlQWDabJ5WohSY3OLVKqEunljAZuHiJyU3iWMypEAyqDDoDILzuUJoRR/LSD1SgVTGYw+RlUH6LljArRgEJbTblMGkhKKXs0hXdYebZQB5QG03heD6WW5tG8o/iU8ruq/rNul+A5oQ0o7c5L8nooZdKh5CrIzMnTDFX1crQ+SgTt4oMQBpS2mvwVSkoFXXpYeXXT2xxZMcyU2W2hHrmXKVQBFeZWk4aSUt6THlZ+ZsVBZPVyprcu1HDKEKKAMkC4wklDSSnvW3A1yQVhdVj5BCEKqPCEU2YwaSgp5X1hXhC2kFAFVJBpa0kp/9EFYQvTgPI5bS3ZRxenVU4I+4KwhWhA+ZQGk/10cVplp56XX2XqqV3sXtod6gVhC9GA8hENJaX8L9q+n4bud6muf4PoHfVMX7FeR+7loQHlAxpMSgVDrKOXhu53qZn3Jj2rZrE4pFu5F0sDysM0mJQKnpmzqxmYeRVTli1zuxTP04DyoPT+SqDBpFTQpFcsV5PTgPKQzBaT7q/kPl2cVtlGVywvigaUB+TsytP9lVynQ8mVcpcGlMvS4aStpeDReVQqW1X/WWhsALSbrxgaUC7RYAo+nUelVGU0oBymI/OKpy0QFSTpibn/tKqT6fWtuudTEarcLgBARO4TkTdF5LKIbJnk2D8SkTMickFEvisiUx0qs2KZrSYNp8lpC0QFQayjl8Gt2xiKvcjpj3Rz1eoVLF6zWSfnFsErLahTwNeBDUB9voNEZAPwJeCjqcdsA76aus2ztDtPqfBKdJ5gbtt5Ys01TL9tnQZTCTzRgjLGPG+MeQGITXLoncDfGGMOGGN6ga8Bd9ldXyU0nJRSZqCP0et1M8JSeaUFVazlwI8yft8HzBaRFmPMhHATkXuAewBaW1s5E3/bmSoBGUlOtJXGVHdUicPG42aIrvhhq8uyjT31Lsp7TyWv5dS5bW6aQ+/5iT3QzU2XS3p9fS/Yy+56R1aO8o6sYmQAug7FK3qu+JCp+Dn8xG8BlT0+M/3/jeRofRljHgceB2hbcp2ZU7vC9gLBmlZTV/wwC2qXWlWS7Zyut5LXcqrWnU+fyXvf2s3rix4Aou8Fe9ldb3Tfftpq9rDvX1WxoMJdc7sOxVmwrNaiyrzPbwHVD2R+6qf/v8+FWibQEXqVyTdqL1sQVnLQASDhUT0YQ+bqnk/l8FtAHQBWAs+mfl8JdOfq3nOaXmuqXKEP57d/crzk58sXeM1Ncwq2bvxAh+CrMPBEQIlIDclaqoFqEakDRowxI1mHfg/YIiLfB04DXwG2OFlrLkEJJyc/9IptLVUi3/Pnui7kN9oCU2HgiYAiGTR/kvH7p4Gvish3gXeAG4wxncaYvxeRbwI7SA5H/2HW4xwXlHACZz/0gvBBqq0YVUi0fT+Nnb+guult9iyuJ9J6s9sl+Y4nAsoY8yDwYJ67G7KO/XPgz20uaVJBCiZVHm3FqFxiHb1Edr/KUNUvuLQihqxezuIKB0eElScCym80nHKzs0WxdvP8QLVKdCuPYJs5u5pI2zzOXXs9LW2/4nY5vqUBVSINp/zsbFEErVUSpLBVyi6eWEnCLzSc/CVfa6S56bLDlVgv359NW2Ae0tfHaGuj21X4mragihTkcJpsRJ0dH3r5urislK+Vklw1wB8TSZN/N7lX1NDBGCroNKCKEORwAuvnHxUj/cHqxHBzuzhxHanQufHreVOqWBpQkwh6OLnNzx+y2npRyl56DaoADSdYsXERazfPL+pYO6+L6LUV5SdmULd0t4K2oPLQcLqi2FaO1S0Ku7oXlXJEU8TtCnxPAyoHDadg23zn2pzLHemgg8J05QzlNO3iyxLGcApb91m+tfi8eD2s0N+N039vunKGcpq2oHIIUzjBla65FRvzbxBol7CtqFBqK+S1rSd8t7+SUlbRgMogsWjowsltYeoaKjSkXlshSk2kXXwpmZsNhpWuTmAvDSGlSqMtKMJ53SmTHy5+e61Gr9WjVBCFvgUV9nACf1z8trLGfGvxldJS9MM5s5q2sItT1X/W7RICQ1tQhDucJhO0bS4Atj75mg46KEPQ3ge2amwAdLJupUIdUHrdaXJBbhEUIxo/yxffvY+Hl3ybmbWzbHsdL7ZCtBtTuS20AaVde6oYj518hLf6dvPoyUd44OqvV/RchYbU5/rAvxIQi4o63mph7MZU3hLagAINJ1VYNH6WF6I/wGB4Ifoc9877XEWtqFJDRQNChV0oB0lo1954XuxeyubGBfrHTj5CggQACUZ59OQjrtajgiU60MOdP76fcwM9bpfiWaFtQWnr6YrXtp5wZRWJUjh9zSPdeho2wwAMm+FxrSi76yl2BXnlX4/t3cpb3Qd4dO9WHlh9n9vleFLoWlDaespNWwTjZbae0rJbUXZyoxtv7eb5rNi4aOxH2Sc60MML725Pdh+/u11bUXmEsgWlraeJ/DwqK9bRS6Kz+PpHbq6G2sLH7Ot/a6z1lDZshtnX/1Y5JfpCsaEY1i8tVnps71YSJtV9bBLaisojVAGla+0FT7R9P3VdO5i6vL/ox1zqv5XBl7cxcPM6Wtqacx7z3I0/tqpEy7kRELo3l3XSrafhxAgAw4kRXnh3O/fetJmZkRkuV+ctoQoo5W2xjt5Jj0nP0jcnTxOJHqO26W0urKmi/vqVRb/OaE+cY3NeZuGOg/QcXo3M+8DYfYmGwqP08gWak/zc2lXjW09p2orKLUQBZbT15GHpllDTjNRbcqgv53GmoR6AWG03J9b0M+WGNha1rS/ptQYOxanZsIrTCzpoObqdltOzAZD+wdwPqGsE4HzPCNHOj9C6/saSXk+pTPuiB8daT2nDiRH2RQ+6VJF3hSiglBfFOnqJ7H6V2vo3iC2/xMWlV6fuEUZaCm2Z/QGmty5kVlNbWa+7qG09Z1sXcvGGTi6O3TptwnE1sQEg2X1ozp6jcf+TDG79MP2zl9gaVGHbJytMntv0HbdL8A0NKOWKWEcvcngfdad20b2qiylLryaybFnZgVOOWU1tMNnrZd19ctZLDB/+KbXv7GToiQ9yac0mW7r9MrvxnNqwUENReU1oAkoQt0tQKT0vv0rdqV2MtPYQvaOeyIqNjgZTJebdcjtnl3UwcO1uju7dycIdp+g5vJqWNddjmma7XV5F9NqW8prQBJRyR7R9Pw3d7yKXr6zsfKnhED0fGWTKDW0sLvH6kRfMamqDNW0cn93O6QUdTN3790S2HRu730y9yvYuQKXCQANK2SJ9bWl4eCfdNwxS09zIyIypqXunMH3Fat+0mvJJX8caaNnNGd4DoKYnuddU4/43GNz64YJD2ZVShWlAKculR+R1Lz9ITXMjkdv804VXqnRrKlv6WlXrjoMM7r5eg0qpMmhAKcuku/Nq69/gwpqqQAfTZNLXqnqbX6evMznnKtp5u6vdfrq/k/Kb0K3Fp6wX6+gl0XOeoegzdLf9lP71s5j/8bt9EU7ZK0pbucL0rKY25n/8biIbVhFd1cXwiScY3LqtqAnJdtDtO5TfeCagRGSGiGwTkUsiclxENuc57kERGRaR/oyfa5yuVyVF2/dT+8ZTXJ5yHvlQnMimjcy75Xa3yypa5orSuX63wqK29UQ2bSTx4RqOzXmZ2jeeItq+37LnVyqovNTF9x0gDswGbgL+TkT2GWMO5Dj2GWPMpx2trkxB7lZJd+nVXN1NdWQl82+92+2SSpK9ovS/W/qb4363cm20WU1t8PE2jne0c+Fg59iEX702pVR+nmhBicg04FPAA8aYfmPM68CLwGfcraxyQe9WufZ6Q+3Mq5C6OrdLKVn2itL/9bVvTlhh2mqL2tYz/+N3079+Ft1tP6X2jadc7fZTysu80oK6Dhg1xhzJuG0fsDbP8beLSA9wGvi2MebRXAeJyD3APQCtra10xQ9bWHKx8u+rU6ieuBmiK36YzXeupff81An3NzddZuuTr1lSYTlGhkbhg5d5s6qVgfpmGJ5C16G4a/Xk0xPv4RtHvsWXr7ufGbXJlkp8yLDvl2fYdmQ7w+bKitLvXbiyYvdwYoRtHdv5eMO/HXucpZo2YG4a4OyyAaqGqqgaPcLFi43U1E384pJ+L1SuvPdiqayr1xlW1zty9RADo3NJTJ3J8MlaLp+x7t9FfMh48t+ZXbwSUA3AhazbLgCNOY59Fngc6AZ+HfihiJw3xjydfaAx5vHUsVy35DrjxHIxpShUT3p5m1zhBNB7fqojy9/kEm3fT+S9lxhp7aF3bT3Tl9zM5TMzWLBskk2WXLBl13Mc6HuHF/t/MLZSdNehOC/2PIeRBJj8jzUkxj3OerXEOt5n5t6TRM4so3PhdTm7+6xa6qjQUkZWvpecWprJKlbXGzvey4JTrzK45CTd15W/XmQuXYfinvx3ZhevBFQ/kL3U+HRgwpLWxph3Mn7dJSJ/CdwBTAiosMl3vStTJde+0pNvI/0Hia7qQlYvH1sJosvCb4lWyb7GlHlNKdeK0tmcWGF6tDX5HcwMZn8/s57fr3n6Sl/x+5Op/LwSUEeAGhFpM8Z0pG5bCeQaIJHNgC60B8Vd16r02lfL9H4aP7SIc8unl7zNhdMK7VrqpRWlj90UwQzsonVHl+tzpZTyEk8MkjDGXAKeBx4SkWki8mFgE/BU9rEisklEmiXp14DPAT9ytuLi5VsJ2o8rRKc3C6xqztXz6i35di21Yn6TlWY1tY0NQ+/96HlqLz7J4NZtOgxdKUpoQYnIT4GPAZ8yxjyfcbsATwB3An9qjPlSmbX8IfBd4CwQA+41xhwQkVuBnxhjGlLH/U7quKnAidRrPlnma9ouKN0qsY5epu39OSfndfBOdRWR1pvdLqmgQruW3jXjHpeqyi89DP3krJdYcfg8Ry5O/hilgq6ULr77gbeAr4vIj4wx6SbAt0iG0/+pIJwwxvQAn8hx+06SgyjSv/9uua/hR27v0ZO+7nR5eCd9KwbHXXfysoK7lloztckWIy0RzEDu3YSVCpuiA8oYs09EniIZRp8BtojIHwNfIDmy7rP2lBhubrfAEp0naKg5QmTlHLo/5uyGgpUodI3J68N090YO0rqnnyiE7npUECa2V/WfhcZcA5NVqUq9BvUVYAh4UETuA/478A/AZ4zJ6k9RjiumVVVOy6txdj3Hbor4Jpz8bFHbemT18nHXo0aG/He9slxBn9geJFauW5lPSaP4jDEnROQvgC8BfwXsAj5pjBn3lVREvgx8ElgKXAb+CfiyMeZtS6oOkHzfGJub5rDz6TMlPZcd3zCrB2O5Z6Mp2yxqWw9tyS07Wg8fpGpgLrHuXl0SKYSiAz188dVv8PC6L1u27JZVMtettGuuYDnDzKMZ///7xpiBHMesA/43sJvkEPCHgFdE5IbUtSaVku+bYb4Jum6QxgjJhrNyUl3LPKZGTlLjlckgk7jyZWv8ihV+6p7zGidCoByF5hhaqaS3voj8LslBEWeAOcDngXuzjzPGbMh63GdIdsh+GHip3GKVs2IdvUyLHoO5blcSTulJvFaZ7PpOpdd/tHvOWrlCIGO8WN7HONHiKjTH0EpFX4MSkd8EniQ5efaDwCHgD0RkWREPb0y9lq6I6RPR9v3U7XiUo4t2smfxcepbF7pdUngZa65BTRYgGjDekisEinmM1dvFZHNyjmFRASUia4DnSM47+tfGmCjwAMkW2P8s4in+EtgL/LzMOpVDYh29DG7dxlD0GaKruohsWMXiNZt1gIRbmiJuV+CoIE1sr0S+EOiJ5/+On93ismvwQqE5hlabtItPRFYCL5PsovuYMeY0gDHmORF5E9gkIrem5ivlevyfA2uANRlzp5SHzZxdTaRtHueuvZ6Wtl9xuxxFehWP4A+S0GtVSblCYNQk2HriGVZ+8HOTPsbObreCcwwtVjCgRGQJyWHkBthgjHkv65AvA9uBPwNuyfH4/0Vy5YePGGPet6TigMk3Ebe56bIL1ShPqtIutrDJFQIjiREO9h3KeXy+FpcdgxecXMeyYEAZY94lORgi3/2vkGeh1tQq478DrDPG5D6rKu83xuT+NC5uWdDXx2jrPPdeXwFwtL6by3KBpt3t9JxczYzfWud2SXm5veqJF6S3ovnlR7qpqZ9OhPKu3aZDIDrQw288dzeXR+NMra7la9f/Sc7jC3W7eWn0X6lsGcAqIt8hudrEJ4BeEUmHXL8xRtehV65Ij3D6wvwvsoDZbpczqVlNbbCmjff2neP0R7qJ7HqRwa29ZW8TP1mAVBow6S9bftsPygrpJcFqmvfQ+9EhplzfZslq/9nddvm6+JzsdnOSXTMs/jD13/as278KPGjTaypVUHqE01by9+N7Ue3U6Uxdu564vE7DO6fp7zwBZQTUZNd39PpPeWIdvSQ6TzC37TxvL21g/i3WLBeaq9tue7Sd+wc+PaHbzkvbx1jJlu02jDGS5+dBO15PqclkjnDaHm333LYbk5nV1IbMmknjVYU3WVTu+MBC67/rOzlazqt8Mkfd/4KwCKafOTXCyU4jLRFAl7wMi5wDJYz/u+1KoQHlEJ0E6Z7srpIRY98IJ6WskqvbrutQnAXLal2oxh0aUCrwgjTCSRojVJ+KuV1GRYLam2AG+lKtXGUVT2z5rpSdgjrCya+0N0EVS1tQKvCyu0qC0E0i57sxTd4fKq9UJbQFpZSP7Fl8HKndzuC2nxDr0LWXPaM/ltqWRllJW1AO0Vn2qlLpjQyPz27nwq5/puWNiwzuXlD2xF2lvE4DyiF+vvirvGVR23rOti5keuQQkTPVdLpdUIjFOnqZ9vqPiDW9zbtr6xEfrFDiJxpQIRLU0VOqck6+N4LSmxBt309d1w7OrDgI184ksuJm3ZbGYhpQIVLq6KnqaB802VmRvZzaXdRNZvCCJc/j5Mi6IHwZirbvZzFHGbh5iPhNa3RbGptoQLnE862ZRmu3G3dD5u6ifpvvVJSQbWboNc0LGxmIw2ir//+teJWO4nOJzgWxl1O7i7rpaH03lwdOIYf36Yg+FyT69ZzbTQNKBVKutfeCZFZTG5EVN/Pev+qnevhlat94imj7frfLCo3qwdRqHtqKtZUGlJrgXPcol7t7GYqddLuUsuTbXTRorahZTW0sXrOZ/vWziC0/SF3XDg0pBw2aHo7Wd7vy2tGBHu788f2Be09n04DysLWb57Ni46IJP2s3zy/r+fKNksq8vaWtmf7ZS7h8oIGG9rOcePEJzp7vKOv13BK2bQrm3XI7U5ZezcLl5V8LKea9ESbR+FnufOffcS5+dtztsY5ehp7YQvXwy+xZfNy1kXuZ11eDTAdJlMDpgQ1WX6cqtsbW9TcS65hPovMEzT97idOmncEbOi3ZIdQJYV17zwz0lf1YTwzM8ZDHTj7CW327efTkIzxw9dfHdsyt6z/ImVVdyOrlLHbp30P29dUgr8qvAVUCKwPD63NBWtqaoa2ZnsEYN/e9y16G3C6paEHdXbSQ9F5RY9dGVNmi8bO8EP1BMgCiz3HvvM8hTKFlej+NH1rEpXUrXJ3vFIS9zYqlAeUS/caqrCaNESi/EaVSHjv5CInUxpAJRnn05CPc1/8ZAKqa3R1S3hPPfX01qK0oDSg1KdM3gF6u9L7djfuJxN5h6IljXFqzKVDr8znVvZ5uPQ2bYQCGzTAvnH2Wuw/P5uScM7xTXUWEmy17vVJtPfHMhOuro4nRwLai9FNHFTRa3+J2Cb7i1uiqRW3rmb52PfHbp3F00U7qdjwaqBF9Ts0bzGw9pSUSI/zFB3/IxX/zAdeXMzrYdzjHNvCjgb2+6pmAEpEZIrJNRC6JyHER2ZznOBGRPxWRWOrnmyIiTtfrBB1Z5T+Vjq6qJODSw84jG1ZRu/QSiwb36gTeEu3rf2us9ZQ2XJWgo26YRW3rXV9r7zsr/4K37/4JO/7995landzTbGp1LY997Guu1mUXL3XxfQeIA7OBm4C/E5F9xpgDWcfdA3wCWAkYYDvwPvCY3QU6PbDBS9epamIDoOtgFmTF6Corlmeqb11I7RJgD1T1nwWC09Vnt7+u+z6R/a/SO7yT+A2DyOrlnhy9GpaBEp4IKBGZBnwKWGGM6QdeF5EXgc8AX8o6/E7gYWPMidRjHwb+Iw4ElJcCw0kSaQQfjeJzS6UfGlYOHz5a3801VQnq9/6cXqB51dKynidM0quTH1u4j8aFLURu2+h6iymXfBPRgzhQwhMBBVwHjBpjjmTctg9Ym+PY5an7Mo9bnutJReQeki0uWltb6YoftqZaB8TNkCfqHVk5yoHqpQxNuYauQ/G8x8WHTMH7vcSOWnviPWw7sp1hc+VDY1vHdj7e8G+ZUVtcC+bb7z/FaCIZcKOJBH/26v/jvms+W0a9i0g0z+bIugFGLw9TN3CG89E+aq5yZgSaPe/dRXnvqfS1Lo8OcfzMP2Nu7OfCr1xPbd1KzLQmLp+BrjPeek/HhwzffvXK+yQt8/0SJF4JqAYge9+AC0Cuf1HZx14AGkREjDEm80BjzOPA4wDXLbnOLKj1z7fIrvhhvFBvdN9+5lzaS+Lafs7dNC/vtgJdh+IsWFbrcHXlsaPWLbuew0gi2emcYkjwYv8PimpFRQd6eOVffsZIKuBGzAivnGvn/nWfhs6GMuqtBaZzvKOd4Xc6iLxSzYzEBx0Z3WfHe7dQ93q5rxXr6CXReYLR6y9iTm5lytKriSxbxqym8lZqcULXoTjvDR8Ze5+kjZgR3hs+7Jt/g8XySkD1A9OzbptO7lkd2cdOB/qzw0lZo2rhfPp3f4Bz+3/B6MBR+un1ZJ98KXriPXzlxw9buk9UpatXFFqe6a4Z95RdV3r33YGW3Rzdu5OFO07Rc3g1M35rXdnP6Qaru9fT3XmJqzq52LiRptXF7elkxx5jpT5nmCaieyWgjgA1ItJmjEkv/LYSyB4gQeq2lcC/THKcskByRYnfpq59CY1v/4LB3g6OfWir68NtK7H1xDOW7xNV6YdGwYCr8HNwVlMbrGnj+Ox2ojd10/zay4GcK1WM9JJFw8M7ubR8kClLr6b2qpm0tM0t6vF27DEW+H3LKuCJgDLGXBKR54GHROQPSI7i2wSsznH494AviMiPSXao/BfgrxwrNqRa199I755a5p2s5obRq/inaCf4MKCiAz1sP/uzsgci2LVLb6GAs+p62aK29dAGx2e3Y3b9M607TjH0+tzQBFW0fT+R917i2JL3xg2CKPb82rEGXpjW1SuHZ+ZBAX8I1ANngaeBe40xB0TkVhHpzzjur4GXgP3A28DfpW5TNks0zHK7hIo9tnfrlWVsyljhPAirSC9qW09k00aidwyOTerteflVt8uyTXoF8tqLTxJd1UVkwyrmf/zuknsA7NhjLOj7llXKEy0oAGNMD8n5Tdm37yQ5MCL9uwH+a+pHqaKlv62OmPKG5wbp225mt9/pBR1Edr3I0BPHGGhdPG4XBer+AAAV3UlEQVT1kNb1N7pYZemyV8+oHoxRd2rX2ArkkdaFJQdTdKCHz7c/xKHe9y0d2h2m4eLl8lILSvlEotefK5JWuk+UHd923d54LnOJpBNr9tDYuJ2mmr+lqeZvqb34JINbt/liNYpYRy+DW7cxFH1mrP6mmr+lYe5OoncMEtm0seyVIB7bu5VfnjvMyOj4a4TpNfDKFbZ9y8rhmRaU8gepvwq/LpldyUg7u77teuECebo1dfZ8B5lRNHzoEP/+9/8D55+a+Odrbhxm57OnHKuxUEjK4X3Undo1dm2p97Y14+5fXMG10vTfO0CC8QOFK10DL6z7lpVCA0qFRnogQjnzoAp92y03WLzWZTihdXFLG+f7c9fT2zeFwa3bGLh5na0DLNKj7mY1nL5y49D4L0g9U6Kc/sgwkRtWMd/iKRCZf+9TqmrYePVa/uHYTi6PxiteAy9Mw8XLFZqAMug0KSuFbW0+O77t+n09tWNzXmbhjoP0HF6NzPvA2O0j144SO155t2C6ZdS9qouepVdn3pPaoDFtGtPLuLY0mVyt5pff20FVVfLKiB//zvwmNAGlrFPV2AScdLuMolkxNNzqb7tBuEAe2bCK0ws6aDm6nZbTswGQ/kH6597CrD0vVfz855ouEr2jisgKd9bEy9lqJkEitcyQH//O/EYDSpXkXPcotdNj4P4qTEWz8jqPVfOg7OgydFp6lYqLN3RycezWaYwMVPH+702z4BWmsdjFVUtytZqz+XmzQLvm9FlJA8pDxu8aemVxTKt3DS1XS1sz0c4ldB7YwcW+w5iz56i9bY2nV5TIdZ0nY9ZCyawKu6BcIJ/V1DZhwnbXoTgLfL4cFkxsNd/xo//MoZ73x93m580CvTBAZzIhCighHrtIbUv2kn/e4dSuoZVoXX8jsY75LN69gMS7Bzlt2hm8oZMqbnW7tJxyXecpd207Kwc1+OUCecvMy8TOTc15e9ik/86iAz38xnN3WzJQwq1WjNcG6OSj86BUyVramqnf/NtcnruatdW3s/gYDI96b7+ofNd5euLlXcAP46z/136xg7eP//2En9d+scPt0iZwak6Zle8Dt1Ym8ct7WQNKBVa+6zxbTzxT8nPlCzu3JtiqiZz4sLfyfZDdinHqveSn93LoAioeuzj5Qapo5oJ3z2e+6zwH+w6V/Fw669/bnPqwt/J94FYrxk/v5RBdgwLT0orEom6XERjJNdu8960rLd91nnJWBw/KoIZ8/DCiqxCn5pRZ9T5wc5qBn97LoQooryu0a6hyl18GNZTLDyO68nHyw96q94Gb0wycei/HL8Yqfo5QBpRXR/NlDiX3ypbvKvj8MqIrHz/OKfNTK6YcVoQThDCgtJtPqfH8vuSSHz/sg9wiT4eTmdkyyZGTC11AKRucH4DidswOHL9fuwnCkktB/rD3KyvCCUI4ik9Zq6oh+FuFF+L3HXb9NKJLeV/8YsyycIKQBpRpadXh5qpibs1jsZIfu8eUN1l13SmTdvEpVSa/X7uBYHeP+b371U+svO6UKZQtKKUq5afZ+GHl9+5Xv7ArnCDkAaXdfKpceu3G24LQ/eoHdoYThDigTEur2yUoH9NrN97ml8VQ/czucAK9BqVUWYJ87cZJdlwnCsLQea9zIpwgxC0opcLMqa0pJmPHdSLtfrWXU+EEIQ8oHW6uwqrUYLAj0Oy6TqTdr/ZxMpxAu/iUCqx83WflrL1nx2Kydg3T1+5XezgdThDyFpRSdnOzKy1fK6nUAQR2tHT8MkzfK12hbnMjnEADCtDh5qp4pX5guTUXJ1+olBMMdoyI88t1Ip1L5V44gQaUDjdXJSnlA8vNuTj5QqXUYLCrpVPJdSKnWjU6l8rdcAINKKWKVuoHlltzcQqFSqnBYFdL57lN3+Htu38y4aeY60dOtWrCPpfK7XACHSShVNGKvagfHejh8+0Pcaj3fVfm4hQKlVIHEHhtRFyxAzwqnV8V5rlUXgimNG1BocPNK5Ho73W7BEeU0tX12N6t/PLcYUZGx3+wO/Ut3MpQqaSlY4diWzWVtrL8co3Mal4KJ9AWlLJCU8TtCmxX7Lbi6SADSGDGHe9UyyOow6yLbdVYsYW911qOTvBaOIEGlFJFKfYDKzPIplTV8Mm2Db7bgsOriv2SYMX8quyQz+wyDJrMfZy8FE7gkS4+EZkhIttE5JKIHBeRzQWOfVBEhkWkP+PnGivq0G4+lU8xXV1+mdvjV8V8SbDr78CKgRlenFOV2WryWjiBd1pQ3wHiwGzgJuDvRGSfMeZAnuOfMcZ82soCTEsrEota+ZQqZIr9hq/KU+wIP6v/DqzoMkzXZvVqHJXwYpdeNtdbUCIyDfgU8IAxpt8Y8zrwIvAZdytTk6ketH6LZz8L43ULr7Hj78CK4eZemlMVvxgjfjHm2VZTJjHGTH6UnQWIrAJ2GWPqM277IrDWGHN7juMfBP4IGAVOA982xjya57nvAe4BaG1t/dUt/7fwG0tGhpGa6jL/JNaKmyFqpc7tMgoaudBHfZ1hWIa4XDuNqXXeOHeTiQ8ZauvE7TKKFoR6e+I9fOPIt/jydfczo7bZpcpyK3R+e+I93P3WfyJu4mO31VbV8sSqx0v6c3z7/Uf5h7OvMGJGqJEaNsz6GPdd81lLay2GSYW3qXGm8+zffGzTL4wxHyr38V7o4msALmTddgFozHP8s8DjQDfw68APReS8Mebp7AONMY+njqVtyXVmTu2KgoVIX7KLr7Zlegnl26MrfpgFtUvdLqOgnn9+lWvnvsuexcepmvZbLFhWP/mDPKDrUJwFy2rdLqNoldRrx35Lk9n3yzP8+fsPj3vNLbue40DfO7zY/wNPdG9lKnR+t+x6DiMJMgdkGhIl/TmiAz288i8/Y8Qkw2HEjPDKuXbuX/fpkv9Oyn0v+KE7Lxfbu/hE5FURMXl+Xgf6gexEmA705Xo+Y8w7xphTxphRY8wu4C+BO6yoVZc9Kk6so5ehJ7YwFHuR3Y37kdmzmVLt7dZeWLmxltzWE8+Me00vdW+VyoouQzfnVKW788B/4QQOtKCMMesK3Z+6BlUjIm3GmI7UzSuBfAMkJrwE4J/+D5+Ltu+nrmsHRxfto/6muUxfcTOzmtroOhSf/MEh53RrxqqL+6W+5vazPxv3mnZtq+EEK+aUuXVt0s/BlOZ6F58x5pKIPA88JCJ/QHIU3yZgda7jRWQT8I/AeeBm4HPAHztUbqjFOnpZzFGmb7iWi9OGmHfLhEuEqgCnR3G5EQyP7d1Kgiuv+b/efIK/P/aPoVwyKM3pidNentdUKtdH8aX8IVAPnAWeBu5NDzEXkVtFpD/j2N8B3iXZBfg94E+NMU86XG+oJfrOu12C7zjdzeXGnKz0a6avtQwnRnj5/Z8xmhgdd1wYlgxyQ3Z3nt/DCTwSUMaYHmPMJ4wx04wxC40xWzPu22mMacj4/XeNMS3GmAZjzDJjzCNW16MTdic30hL85Y2s5PTK2G5c98j1mqMmwYgZH1A69N5aQQymNNe7+LxGJ+wqq7mxMna+6x4vvtdu2+vmek2AZTOuCez6gG4LwnWmQjSgVEnM4AU80vD2DTdWmMgVCF/b9W2ePfxj2143/Zp+G8bvR0EPpjT9pFElq2rON0VN5eKFFSb8PNRbXWESI75ZBcIK2oJSJTsT76S+daHbZfiGF7q3/DzUOxc3JiC7aazFVNMYimBK0xZUHjpQ4opYRy+DW7dRt+NRfrn0TY4thllNbW6XpYoUxFXW3ZiA7LT04IcwtZiyaUDloCtKXBFt30/tG08x1LyH3o+eZ/ra9SxqW+92WaoEQdsdNujdlUEelVcqDSg1qYXLGxn4cAMLfu23teXkQ164BmYlp4fsO0WDaSK9BqWKZuY0uV2CKoMXroFZxY0h+3YL0soPVtMWlJqUGci5bq9SjgtKd2Wu60saThNpC0oVRVeOUF7g5+7KzJYSaGupGBpQqqDqwVj+nbmUcpgfuyu1C698GlAFxGMXPbF5odukMQIMuV2GUr6hrSXoH4pNftAkNKDy0DX5oHfPYSLRY3TPPQ14a5tupbxGQ+kKK8IJNKBUHtH2/UTee4kjqzqZvriViK4codQEGkrjpYOp9iprzoMGlBon1tFLZPer1Na/Qe9Hq7jq+hU6MVepDBpKE2W2mKwKJ9CAUjnMnF3NwJxZXL5tmU7MVQoNpUKsbjVl0oBSEyS31FAq3DSUCrMzmNI0oFRuTTrvSYWLBlJx7OrOy0UDSo1T1X8WGhsAbUWpYBtb9y5RT/xicrUUDaX8nAymNA0oNaZ3z2Hq9/6ck/M6uFBfRQQduaeCJVcryZyJazAV4EYwpWlAKWIdvSQ6TxB57yVOfKSbKTe0sVhH7qkA0G678rkZTGkaUIpE5wnmxH7M8Y+eZ/pt63XknvItDSRrODEAohgaUAqAxtn1jF6/UMNJ+UZ2GIEGUiW80GLKpgEVcrGOXho7f8HZlRfQ5YyUl2kg2cOLwZSmARVi6eWMzqzqgsUzdTkj5RkaRvbzcjClaUCFUHo5o5rmPfR+dIjIbRu1a0+5JlcYgQaSXfwQTGkaUCGVXM6ogcT1S2nRcFIO0TByj5+CKU0DKuRGW3U3QmUPDSNv8GMwpWlAhZQZvKDLGSnLjNs1VldmcJ2fQymTBlQIVfWfdbsE5WOTtYx0ZQb3BCWY0jSgQibW0cs0Xc5IFUG76Pwhe/faIARTmgZUSKRH7tX1H9TljNQEGkb+E7TWUi4aUCGR6DxBQ80RXc4o5DSI/C2RGKF/qG/s96AGU5oGVIjockbhomEUHFdaS/WBD6VMrgeUiNwH3AXcCDxtjLlrkuP/CPhvQD3wQ+BeY8xlm8v0NV3OKPg0jIInVxeeVMfdKscVrgcUcAr4OrCBZOjkJSIbgC8BH009bhvw1dRtKgddzih4NIyCK0jXlXoSud+npXA9oIwxzwOIyIeA+ZMcfifwN8aYA6nHfA34PjYElMSi1LZMt/ppHaPLGQWHSYyMzSsau03DKFCCFExgTTiBBwKqRMuBH2X8vg+YLSItxpgJZ0RE7gHuSf16+Vc3fuBtB2q0ykzgnHVP96x1T5WbxfXayk+1gtZrNz/V66daAZZW8mC/BVQDcCHj9/T/NwITAsoY8zjwOICIvGmM+ZDtFVpE67WPn2oFrddufqrXT7VCst5KHl9lVSG5iMirImLy/LxexlP2A5n9bun/78txrFJKKR+ztQVljFln8VMeAFZypb9qJdCdq3tPKaWUv9nagiqGiNSISB1QDVSLSJ2I5AvO7wG/LyI3iEgz8BVgS5Ev9Xjl1TpK67WPn2oFrddufqrXT7VChfWKMcaqQsorQORB4E+ybv6qMeZBEVkIvAPcYIzpTB3/BcbPg/qszoNSSqngcT2glFJKqVxc7+JTSimlctGAUkop5UmBDSgRuU9E3hSRyyKyZZJj7xKRURHpz/hZ50ylYzUUXW/q+D8SkTMickFEvisiUx0oM/3aM0Rkm4hcEpHjIrK5wLEPishw1rm9xis1StKfikgs9fNNERG76yuzVlfOZY46Svm35dr7NKOGour1yOfAVBH5m9T7oE9E9ojIxgLHu3p+S6m3nPMb2IDiyhp/3y3y+J8bYxoyfl61r7Sciq5XrqxJuB5YDFxDck1Cp3wHiAOzgd8DHhWR5QWOfybr3L7voRrvAT5BcsrCB4HfAv6TA/VlKuV8unEusxX1XvXA+zStlM8Ctz8HaoAuYC1wFfAA8KyILM4+0CPnt+h6U0o6v4ENKGPM88aYF8ixwoQXlVjv2JqExphe4GskV4S3nYhMAz4FPGCM6TfGvA68CHzGidcvRok13gk8bIw5YYw5CTyMQ+eyjFo9oYT3qmvv00x++iwwxlwyxjxojDlmjEkYY14GjgK/muNw189vifWWLLABVYZVInJORI6IyAMF5mJ5wXKS6xCmja1J6MBrXweMGmOOZL1+oRbU7SLSIyIHRORee8sDSqsx17ks9GexWqnn0+lzWQk336fl8tTngIjMJvkeOZDjbs+d30nqhRLPr5c/hJ30j8AK4DjJv/RngBHgG24WVUBJaxLa/Nrp12/Mc/yzJCfrdQO/DvxQRM4bY562r8SSasx1LhtERIwzczBKqdWNc1kJN9+n5fDU54CITCG5W8OTxphDOQ7x1Pktot6Sz68vW1Bi8Rp/xpj3jTFHU03U/cBDwB1erRcb1yQsotbs106/fs7XNsa8Y4w5ZYwZNcbsAv4SC89tHqXUmOtc9jsUTrleP13DhFpdOpeV8NXamXZ/DpRCRKqAp0hem7wvz2GeOb/F1FvO+fVlQBlj1hljJM/PGiteArBsJJcN9abXJEyzbE3CImo9AtSISObmUivJ36Sf8BJYeG7zKKXGXOey2D+LFSo5n06cy0rY9j51iCvnNzWK9G9IDpr5lDFmOM+hnji/JdSbbdLz68uAKoaUsMafiGxM9Z0iIstIjkT5Ua5j7VJKvVS2JmFFjDGXgOeBh0Rkmoh8GNhE8tvTBCKySUSaJenXgM9h87ktscbvAV8QkXkiMhf4Lzh0Lkut1Y1zmUsJ71XX3qeZiq3XC58DKY8C1wO3G2MGCxznifNLkfWWdX6NMYH8AR4kmdCZPw+m7ltIsnm8MPX7t0j2618C3ifZ9Jzi1XpTt30hVfNF4AlgqoO1zgBeSJ2vTmBzxn23kuwiS//+NMn+8H7gEPA5N2vMUZ8A3wR6Uj/fJLUEmNvn0yvnstj3qtfep6XW65HPgUWp+oZStaV/fs+L57eUess5v7oWn1JKKU8KbBefUkopf9OAUkop5UkaUEoppTxJA0oppZQnaUAppZTyJA0opZRSnqQBpZRSypM0oJRSSnmSBpRSLhORn6YW4/1k1u0iIltS9/1Pt+pTyi26koRSLhORlcBbwGHgRmPMaOr2h0kuZfN/jDH3uFiiUq7QFpRSLjPG7CO5OOz1pHbSFZE/JhlOzwKfda86pdyjLSilPEBE5gMdJBfT/BbwV8A/AB83xsTdrE0pt2gLSikPMMacAP6C5OrQfwXsAj6ZHU4icpuIvCgiJ1PXpu5yvlqlnKEBpZR3RDP+//eNMQM5jmkA3gY+DxTaK0gp39OAUsoDROR3SXbtnUnd9PlcxxljfmyM+WNjzHNAwqn6lHKDBpRSLhOR3wSeJLmF9wdJbkb4B6ldR5UKLQ0opVwkImuA54ATwL82xkRJboVdA+jcJxVqGlBKuSQ1/+ll4ALwMWPMaYBU992bwCYRudXFEpVylQaUUi4QkSUkh5EbYIMx5r2sQ76c+u+fOVqYUh5S43YBSoWRMeZdYE6B+18BxLmKlPIeDSilfEREGoAlqV+rgIUichPQY4zpdK8ypaynK0ko5SMisg7YkeOuJ40xdzlbjVL20oBSSinlSTpIQimllCdpQCmllPIkDSillFKepAGllFLKkzSglFJKeZIGlFJKKU/SgFJKKeVJGlBKKaU86f8DaPmaW5a+PzIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_predictions(clf, axes):\n",
    "    x0s = np.linspace(axes[0], axes[1], 100)\n",
    "    x1s = np.linspace(axes[2], axes[3], 100)\n",
    "    x0, x1 = np.meshgrid(x0s, x1s)\n",
    "    X = np.c_[x0.ravel(), x1.ravel()]\n",
    "    y_pred = clf.predict(X).reshape(x0.shape)\n",
    "    y_decision = clf.decision_function(X).reshape(x0.shape)\n",
    "    plt.contourf(x0, x1, y_pred, cmap=plt.cm.brg, alpha=0.2)\n",
    "    plt.contourf(x0, x1, y_decision, cmap=plt.cm.brg, alpha=0.1)\n",
    "\n",
    "plot_predictions(polynomial_svm_clf, [-1.5, 2.5, -1, 1.5])\n",
    "plot_dataset(X, y, [-1.5, 2.5, -1, 1.5])\n",
    "\n",
    "save_fig(\"moons_polynomial_svc_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('svm_clf', SVC(C=5, cache_size=200, class_weight=None, coef0=1,\n",
       "  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
       "  kernel='poly', max_iter=-1, probability=False, random_state=None,\n",
       "  shrinking=True, tol=0.001, verbose=False))])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "\n",
    "poly_kernel_svm_clf = Pipeline([\n",
    "    ('scaler', StandardScaler()),\n",
    "    ('svm_clf', SVC(kernel='poly', degree=3, coef0=1, C=5))\n",
    "])\n",
    "\n",
    "poly_kernel_svm_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('svm_clf', SVC(C=5, cache_size=200, class_weight=None, coef0=100,\n",
       "  decision_function_shape='ovr', degree=10, gamma='auto_deprecated',\n",
       "  kernel='poly', max_iter=-1, probability=False, random_state=None,\n",
       "  shrinking=True, tol=0.001, verbose=False))])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly100_kernel_svm_clf = Pipeline([\n",
    "        (\"scaler\", StandardScaler()),\n",
    "        (\"svm_clf\", SVC(kernel=\"poly\", degree=10, coef0=100, C=5))\n",
    "    ])\n",
    "poly100_kernel_svm_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure moons_kernelized_polynomial_svc_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(11, 4))\n",
    "\n",
    "plt.subplot(121)\n",
    "plot_predictions(poly_kernel_svm_clf, [-1.5, 2.5, -1, 1.5])\n",
    "plot_dataset(X, y, [-1.5, 2.5, -1, 1.5])\n",
    "plt.title(r\"$d=3, r=1, C=5$\", fontsize=18)\n",
    "\n",
    "plt.subplot(122)\n",
    "plot_predictions(poly100_kernel_svm_clf, [-1.5, 2.5, -1, 1.5])\n",
    "plot_dataset(X, y, [-1.5, 2.5, -1, 1.5])\n",
    "plt.title(r\"$d=10, r=100, C=5$\", fontsize=18)\n",
    "\n",
    "save_fig(\"moons_kernelized_polynomial_svc_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "\n",
    "iris = load_iris()\n",
    "X = iris['data'][:, (2,3)]\n",
    "y = iris['target']\n",
    "\n",
    "setosa_or_versicolor = (y==0) | (y==1)\n",
    "X = X[setosa_or_versicolor]\n",
    "y = y[setosa_or_versicolor]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import LinearSVC, SVC\n",
    "from sklearn.linear_model import SGDClassifier\n",
    "from sklearn.preprocessing import StandardScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LinearSVC:                    [0.28474027] [[1.0536456  1.09903032]]\n",
      "SVC:                          [0.31896852] [[1.1203284  1.02625193]]\n",
      "SGDClassifier(alpha=0.00200): [0.319] [[1.12072936 1.02666842]]\n"
     ]
    }
   ],
   "source": [
    "C = 5 \n",
    "alpha = 1 / (C * len(X))\n",
    "\n",
    "lin_clf = LinearSVC(loss='hinge', C=C, random_state=42)\n",
    "svm_clf = SVC(kernel='linear', C=C)\n",
    "sgd_clf = SGDClassifier(loss=\"hinge\", learning_rate=\"constant\", eta0=0.001, alpha=alpha,\n",
    "                        max_iter=100000, tol=-np.infty, random_state=42) \n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_scaled = scaler.fit_transform(X)\n",
    "\n",
    "lin_clf.fit(X_scaled, y)\n",
    "svm_clf.fit(X_scaled, y)\n",
    "sgd_clf.fit(X_scaled, y)\n",
    "\n",
    "print(\"LinearSVC:                   \", lin_clf.intercept_, lin_clf.coef_)\n",
    "print(\"SVC:                         \", svm_clf.intercept_, svm_clf.coef_)\n",
    "print(\"SGDClassifier(alpha={:.5f}):\".format(sgd_clf.alpha), sgd_clf.intercept_, sgd_clf.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAAESCAYAAADaNpzRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XlYVdX6wPHvAplRQUUkFBWHcMKJnDIH0Jy1RNKccZZbt26ZlUNamlYOXa8jqKhp4lypmWnlPCWa5owDDog4hQOIorB+f4DnBwp6UA4c5P08z346e6+193o3HOM966y9ltJaI4QQQgghhDmyyO0AhBBCCCGEyIwkq0IIIYQQwmxJsiqEEEIIIcyWJKtCCCGEEMJsSbIqhBBCCCHMliSrQgghhBDCbEmyKoQQQgghzFaOJatKKRul1Fyl1Dml1G2l1F9KqVZPqP8fpVSMUuqmUipUKWWTpqyMUmqTUuqOUuq4UqpZztyFEEIIIYTISTnZs1oAuAA0BgoDI4FlSqkyj1ZUSrUAPgH8gDKAJ/B5miphwF9AUWA4sEIp5WK60IUQQgghRG5QubmClVLqb+BzrfXKR44vBs5qrYel7vsB32utSyilKgKHgGJa69up5dtSy2fl7B0IIYQQQghTKpBbDSulXIGKwJEMiqsAP6XZPwi4KqWKppadeZiopimvkkk7A4ABAA4ODrW9vLyyIXohhBBCCPE89u3bd01r/dRvxnMlWVVKWQHfAwu01sczqOII3Eyz//B1wQzKHpa7Z9SW1joECAHw8fHR4eHhzxG5EEIIIYTIDkqpc8bUy/HZAJRSFsBCIBF4J5NqcUChNPsPX9/OoOxh+W2EEEIIIcQLJUeTVaWUAuYCroC/1vp+JlWPANXT7FcHLmutr6eWeSqlCj5SntFwAiGEEEIIkYfldM/qTKAS0E5rnfCEet8BfZVSlZVSzsAIYD6A1joCOACMUkrZKqXeBLyBlZldTAghhBBC5E05Oc9qaWAgUAOIUUrFpW7dlFIeqa89ALTW64FvgE3AudRtVJrLdQF8gFjgK6CT1vpqTt2LEEIIIYTIGTn2gJXW+hygnlDF8ZH6k4HJmVzrLNAku2ITQgghhBDmKdemrhJCiMzcunWLK1eucP9+ZsPahciYg4MDJUuWxMJCVhMX4kUhyaoQwqzcunWLy5cv4+7ujp2dHSnPZQrxdMnJyVy8eJFr165RvHjx3A5HCJFN5KOnEMKsXLlyBXd3d+zt7SVRFVliYWGBq6srN28+OhW3ECIvk2RVCGFW7t+/j52dXW6HIfIoKysrHjx4kNthCCGykSSrQgizIz2q4lnJe0eIF48kq0IIIYQQwmxJsiqEEEIIIcyWJKtCCGFiZcqUYeLEibkdhhBC5EmSrAohRDbo3bs3bdu2zbBs7969BAUF5XBEmduyZQt+fn4UK1YMe3t7ypUrR7du3bh16xb79u1DKcX27dszPPett97i1VdfNezfvn2bkSNHUrlyZezs7HB1daVJkyaEhYWRnJycU7ckhHiBSbIqhBAm5uLigr29fW6HQWJiIkePHqVly5Z4e3uzadMmDh8+zMyZMylcuDD37t2jdu3a1KxZk7lz5z52/vXr11m9ejV9+/YF4MaNG9SvX5/Q0FA++ugjwsPD2b59O7169WLMmDGcP38+p29RCPECkmRVCCFM7NFhAEopQkJCCAgIwMHBAU9PTxYtWpTunIsXL9KlSxecnZ1xdnamTZs2nDx50lB++vRpOnToQIkSJXBwcKBWrVqsXbv2sXZHjx5Nnz59cHJyolu3bmzYsIGiRYvy7bffUq1aNTw9PXn99deZMWMGLi4uAPTt25fly5cTFxeX7nqLFi3CysqKzp07AzBs2DAiIyPZs2cPgYGBVKlShQoVKhAYGMj+/fspUaJEtv4chRD5U75KVq8dvMiyiedJSMjtSIQQWdWkSRPmz58PpMzF2qRJE0OCd+fOHZo0acLSpUsBuHnzJk2aNGHVqlUAXLt2jSZNmrBmzRoAYmJiaNKkCevXrwfgwoULNGnShN9++w2AM2fOmPx+vvjiCzp06MDBgwfp3Lkzffr04dy5c4b7adq0Kba2tmzZsoVdu3bh5uZGs2bNuHPnDgBxcXG0atWKjRs3cvDgQfz9/enYsSPHjx9P187kyZPx8vIiPDyccePGUaJECa5evcqmTZsyja1bt24kJSUZfp4PhYaG0qVLFxwcHEhOTmbJkiV069aNkiVLPnYNW1tbbG1tn/fHJIQQ+StZLfYgBv+PyrKpcAdCOv3KqQgZTyWEyB09evSge/fulC9fnjFjxlCgQAG2bdsGwJIlS9BaM2/ePLy9vfHy8iI4OJi4uDhD72n16tUZNGgQ1apVo3z58gwfPpxatWqxYsWKdO00btyYoUOHUr58eSpUqEBAQABdu3bF19cXV1dX2rVrx+TJk7l69arhHCcnJ/z9/dMNBdi7dy9///03/fr1A1I+AMTGxlKpUiVT/6iEMDslSoBSj2/yZYJpFMjtAHJSbMlqLEhuT5vo2bReuZpTK8uxqMZguv8eCEWK5HZ4Qogn2Lx5s+G1lZVVun17e/t0+4ULF063X6xYsXT7JUqUSLdfqlSpdPuenp7ZF3gmvL29Da8LFCiAi4sLV65cAWDfvn1ERkZSsGDBdOfcuXOH06dPAxAfH8/nn3/O2rVruXTpEvfv3+fu3bvprgvg4+OTbt/S0pJ58+YxduxY/vjjD3bv3s2ECRP48ssv2bp1K1WqVAFShgL4+vpy/PhxvLy8CA0NpWrVqtStWxcArXX2/kCEyEMuX87acfF88lXPqrOrNX0ujiVq5wVmNQ7jsnKj+4Eh4O4OffqQsC1c3mhCiBxhZWWVbl8pZXh6Pjk5mRo1anDgwIF0W0REBAMHDgRgyJAhLF++nDFjxrBlyxYOHDhAnTp1SExMTHddBweHDNt3d3enR48eTJ8+naNHj2JhYcGECRMM5U2aNKF8+fKEhoaSkJBAWFiY4cEqSHlozNnZmWPHjmXLz0MIITKTr5LVh2rXt2bQ5i5UuraNfzYdhN69Ydky7Bq9wnm3OsyqN5+dvycgHQdCiNxQq1YtTp06RbFixShfvny6rUjqt0Dbt2+nZ8+e+Pv74+3tTcmSJQ29rlnl7OyMm5tbugeqlFL06dOH7777jrCwMBISEujRo4eh3MLCgs6dO/P9998TFRX12DXv3r3L3bt3nykeIYRIK18mqw8VKQJFmnjDzJkQHc0q32nY63gG7QnEq5k73xUfwuIxp3nkgVghhMjQrVu3HusNPXv2bJav061bN1xdXenQoQNbtmwhMjKSrVu38uGHHxpmBKhYsSI//PAD+/fv59ChQ3Tv3t2o5DA4OJjBgwezYcMGTp8+zZEjR/j44485dOgQb7zxRrq6vXv35tq1awwZMoQ33niDokWLpisfN24cHh4e1K1bl3nz5nHkyBFOnTrFwoULqV27NjExMVm+dyGEeFSOJqtKqXeUUuFKqXtKqflPqDdLKRWXZrunlLqdpnyzUupumvITzx1coUJ0/P1fFDx7mDndN7PNpjldr02h62fl2eXUijUD1kBS0nM3I4R4cW3bto2aNWum24YMGZLl69jb27N161Y8PT0JCAjAy8uLXr16ERsbi7OzM5DylH/x4sV57bXXaNWqFfXq1eO111576rXr1KnDnTt3GDx4MFWrVqVRo0Zs2bKF7777ju7du6er6+bmRuvWrYmNjTU8WJWWs7Mzu3fvpnfv3nz99dfUrl2bBg0aMHfuXEaOHImHh0eW710IIR6lcnKQvFKqI5AMtADstNa9jTxvPpCste6Tur8ZWKS1npOV9n18fHR4eLhRde/dg1/mRnP96zm0PB+MO9Hg4QGDBnHDvy8OZYvzyJAzIUQ2OHbsmDxhLp6LvIeEqZUokfHDVK6uIF8oGE8ptU9r7fO0ejnas6q1XqW1/hG4buw5SikHwB9YYLLAMmBjA28EvUTfc59xPfwsiWEroUIFGDYMx0olWVOoG3P77OBilAxsFUIIIfKTmBjQ+vFNElXTyAtjVv2Bq8DWR46PV0pdU0rtUEo1MWUA3rWtsO7SEX77DX30GMtdgvC9+zN95zXkaqmazKoVwpaf4+SBLCGEEEKIbJYXktVewHc6/XiFjwFPwB0IAdYopcpldLJSakDqONnwtJNePytVyYsul/7L3+suElw7BFAM+msgNdq6s6jov9kzX6ZxEUIIIYTILmadrCqlSgGNge/SHtda79Fa39Za39NaLwB2AK0zuobWOkRr7aO19nm47vXzxwWNWjkwMLw/xaP2E9pvJ7/Zteet2GDqBlYGPz9YuZK42PvZ0p4QQgghRH5l1skq0BPYqbV+2kLdGlA5EM9jXnJX9Jldn/Y3F/LnyigYPx5On4ZOnUhwLcMcj89ZNS2ae/dyIzohhBBC5CWylOvjcnrqqgJKKVvAErBUStkqpZ605GtPYP4j13BSSrV4eK5SqhvQCPj1ae2fP3+eyMjI57iDzFlZwWsdXeCTT+D0af5ZsIa/dHX6XPic9u968GuhAOZ028S5szKwVQghhBAZk6VcH5fTPasjgATgE6B76usRSimP1PlSDZPyKaXqAyWB5Y9cwwoYS8pDV9eAd4E3tNZPnWv12rVr3Evt4jx37twzr/byVJaWFOnZlgax61g69iQLXT7g1cQ/6LfYl/iyVQiuNo3zh26apm0hhBBCiBdIjs6zmttq1aql9+/fD8A777xDaGgoV69excHBAa01SplmJIHWsGdzAgeGL6fm7hnU1XvQDg6o7t1h8GASK1XH2tokTQuR58gcmeJ5yXtI5GVPSkVetJTNLOdZzW0WFv9/ux9//DGLFy/GwcEBgI4dO/Luu++apF2loF5TOwbt7EnZmN3smhqO6twZFiyAGjU4ULAhsxotZu92GdgqhBBCCJFWvkpW0ypVqpRhHWytNeXLl6d06dKG/VGjRnHo0KFsb7d4caj/Tm2YOxcuXuT4wMk4J15m0LZueLzmQajbcJZNOMedO9netBBCCCFEnpNvk9W0lFJMmDDBsIZ3ZGQk33zzDXv27AEgISHBNA9mFSmC16z/YBFxgpBOG9hnVZ9eMV/hP9STzU4dCPH/lXsJydnfrhDCJK5evUpQUBBlypTBxsYGV1dX/Pz82LhxI97e3vTr1y/D89atW4dSioiICMOxVatW4evri5OTEw4ODlSrVo3hw4dz5cqVnLodIUQucHXN2vH8QJLVDHh6enL58mW6du0KwE8//YSnpyfh4eEmaa9cBQsGLG9O05s/8sOkSBa89Cm17+9mwKqWWFerCJMmwT//kCx5qxBmzd/fnz///JO5c+cSERHB2rVradWqFdevX6dv374sXbqU+Pj4x84LDQ3ltddeo2LFigAMHz6cgIAAatSowdq1azl69ChTpkzh7NmzzJw5M6dvSwiRg2Qp1wxorfPNVrt2bf0soqKi9OTJk3VSUpLWWuuJEyfqTp066cTExGe6njHCd97TR0aGaf3aa1qDTrKx1UsdAvXcwXt1TIzJmhUi1x09ejS3Q3gmsbGxGtAbN27MsPz69evaxsZGh4aGpjt+5coVbWVlpRcsWKC11nrPnj0a0JMmTcq0HfFkefU9JER+A4RrI/I36Vk1gru7O//5z38MD2glJyejtcbKygqAxYsXZ3uva+361lT+ogts3Qp//83+ar1pHb+MPjNf4bxbHWbVm8/O3xNeuCcDhchMRpNkP9xCQv6/XkjIk+umVbu2cfWM4ejoiKOjI6tXr+bu3buPlRcpUoQ33niD0NDQdMcXLlyInZ0dnTp1AuD777/HwcEh0wc+nZycsh6cEELkYZKsPoOPPvqIFStWAJCUlMQHH3zA9OnTDeUx2d1XX60atfbMZM+qaIKrTcNexzNoTyBezdz5rvgQVnx1KnvbE0JkWYECBZg/fz6LFi3CycmJ+vXrM2TIEMPYd4B+/fqxffv2dGNTQ0ND6dq1K/b29gCcPHmScuXKGT4MCyFEfifJ6nOytLTkxIkTjB07FkhZbMDd3f2x3pPnZWEBfm8WYuDf/6Lg2cPM6b6ZbTbN6XptCp0+rQAtW8KaNZCUlK3tCmEuMhrD9XAbMOD/6w0Y8OS6ae3bZ1w9Y/n7+xMdHc2aNWto1aoVO3fupF69eowbNw4APz8/ypYta/j/w549ezhy5Ei6B6+0fF0ixBOZajnSvLjMaV6M+VlIspoNChcujLu7OwAODg6MGTMGX19fAHbs2MFbb71FVFRUtrXnUVrRb2FjWt5cytrp57n8ry/g8GFo3574Ep7M9hzP6jlXuH8/25oUQhjJ1taW5s2b89lnn7Fz50769u3L6NGjSUxMRClFYGAg3333HUlJScydO5fq1atTu3Ztw/kVK1bk9OnTJCYm5uJdCGG+TLUcaV5c5jQvxvwsJFnNZsWKFWPYsGGUKVMGgAsXLhAeHo6zszMAu3fvZu/evdnSe2JjA28GueE6bSScPQsrVxKhK9A/chgt+5dkTaFuzO2zg4tR0lMjRG6pXLkyDx48MIxjDQwM5PLlyyxfvpwlS5Y8Np1V165diY+PZ9q0aRle78aNGyaPWQghzEm+Wm7Vx8dHm2r6qSfRaZZybdGiBWfOnCEiIgKlFPHx8YZVtLLDrVuwZsJxkqbPon3sfJy4yQGqs7tmEDUndKWun2O2tSWEKeTVpTKvX79OQEAAffr0wdvbm4IFCxIeHs67775LtWrV2Lhxo6Fu69at2b17NwkJCURHRxs+zD708ccfM3HiRN577z38/f0pWbIkkZGRzJ07l/LlyzNq1Kicvr08Ja++h4RxTLUcaV5c5jQvxpyWLLdqRlSad9PSpUtZtmwZSimSk5Px9vZm6NCh2dZWoULQbYwXPa7/l7/XXSS4dgigGPTXQGq0dYd//xuOHcu29oQQKRwdHalXrx5TpkyhcePGVKlShWHDhtG1a1eWLl2arm6/fv2IjY2lY8eOjyWqAF9//TVLlixh//79tG7dmsqVK/POO+/g4eFBUFBQTt2SEEKYBelZzUV3795l4sSJ1KhRg7Zt23L79m0GDRrE0KFDqV69era1E31Rs370brrdmoHNj8sgMZFznk1Z7xlEvfEdqO4jTx0L8yG9YuJ5yXvoxSY9q/8vL8aclvSs5gG2traMGDGCtm3bAnD06FF+/fVXwwo3Fy9eJDw8/LnHt77krugzuz42SxdCVBTJ477C4twZBv4WQLFXyjDH43NWTYvm3r3nviUhhBDCpEy1HGleXOY0L8b8LCRZNSN169YlOjqa+vXrAxAcHEydOnUM87YmZce0VC4uWHz6MXEHThPSbg1HClSnz4XPaf+uB78WCmB2101EXcgDH8eEEELkS6ZajjQvLnOaF2N+FpKsmhlra2vDGNcPPviA1atX4+bmBqQ8RdyxY8dsaadSVUsGrG5Lg9h1LB17koUuH/Bq4h/0D/PFuWEVmDoVbt7MlraEEEIIIZ6VJKtmzMnJyTBEAMDb25tatWoZ9j/77DO2bdv2XG04OsLbw8vR+/I3nPwjisUtF2DvVijlQSx3d7ZXHcSCDw5y/fpzNSOEEEII8UwkWc1DhgwZwogRIwCIjY1lxowZ7Nq1C0gZIvDXX3898/hWpaBeUzu6/tITtXs3hIcT16YztY8soNe3NTjh0pDgxosJ3yEDW4UQQgiRc3I0WVVKvaOUCldK3VNKzX9Cvd5KqSSlVFyarUma8jJKqU1KqTtKqeNKqWY5Eb85cXZ2Jjo6mn/9618A/P7779SqVYt169ZlTwO1a2O3eC5bvr9IsNdkXPRlBm7thkfDUsxzG8ayCedISMiepoQQQpg/c1naM6MYHm7PE7Mp78/SMuNrW1o+/7Xzg5zuWY0GxgKhRtTdpbV2TLNtTlMWBvwFFAWGAyuUUi7ZHq2Zs7a2Niwo8MorrxAcHIyfnx8AISEh+Pr6cuvWrWe+vqUltOxahIHH/oNFxAlCOm0g3KoBPWO+xn+oJ+qNDvDrr5CcnC33I4QQwnzlxaU9sxKzKe8vsz+T8ufTODmarGqtV2mtfwSeeQSkUqoiUAsYpbVO0FqvBA4B/tkUZp7k7OzMgAEDsLW1BcDGxgZHR0cKFiwIwJIlS9KtoJNV5SpYMGB5c5re/JEfJkWyveGn2B7YDS1boitWJMxnEusW/UN2TFgghBBCCPGQOY9ZramUuqaUilBKjVRKFUg9XgU4o7W+nabuwdTjj1FKDUgdehB+9epVU8dsNnr16sXq1asNMwuMGzeOqVOnGsrPnj37TONb7eyg0wceNN42Fi5cgLAw/rF9ibf3DaFpD3dWFg4kNCjcrD9pCyGEECLvMNdkdStQFShOSo/p28BHqWWOwKNzKt0ECmZ0Ia11iNbaR2vt4+KS70YKGOzdu5dZs2YBKQ9nvfzyy4wbN+75LmptDV26YLFtK98N+ZtVhQJpFb+CPjNf4bxbHWbVm8/O3xPyxCoaQrzo5s+fj6OjY461p5RixYoVhv3jx49Tv359bG1tKVOmTIZ1hBAiI2aZrGqtz2itI7XWyVrrQ8AXQKfU4jig0COnFAJuIzJlY2PDSy+9BICVlRVTpkzhjTfeAODw4cM0a9aMY8eOPdO1nZ2h54RqvB07gz9XXSS42jTsdTyD9gRS+XV39IdD4NSpbLsXIczV1atXCQoKokyZMtjY2ODq6oqfn1+6IThnzpyhX79+lC5d2vDvsmnTpixYsIDExERDPaWUYbO3t8fT05OuXbuyffv2DNtetWoVvr6+ODk54eDgQLVq1Rg+fDhXrlwx+X1n5NKlS7Rr186wP2LECOzt7Tl+/Dh79+7NsI4QQmTELJPVDGjg4XN+RwBPpVTantTqqceFERwdHRk0aBBVqqSMnIiJiSEqKopixYoBEB4ezq+//prlFbMsLMDvzUIM/PtfOEYeZna3zVyt0RyLqVOgQgXu+bYkpO1qjh6Sga3ixeTv78+ff/7J3LlziYiIYO3atbRq1YrrqRMVh4eHU7NmTQ4fPszUqVM5dOgQ69atY8CAASxYsMCQxD00e/ZsLl26xLFjx5g7dy7W1tY0atSICRMmpKs3fPhwAgICqFGjBmvXruXo0aNMmTKFs2fPMnPmzBy7/7RKlCiBjY2NYf/UqVM0bNiQMmXK8PBbrkfrZNWDBw+eezlqYby8uLRnVmI25f1ZZJJtZXZcPEJrnWMbUACwBcYDC1NfF8igXivANfW1F3CYlAeqHpbvBiamnv8mcANweVr7tWvX1iJjycnJhtc9evTQLi4uOjExUWutdWxs7PNdPDpa6y++0DcLuWsN+iweOqTsOP3T7Ms6tQkhDI4ePZrbITyT2NhYDeiNGzdmWJ6cnKwrV66sa9eurZOSkjKt8xCgly9f/lidTz/9VFtaWuqTJ09qrbXes2ePBvSkSZMyjUtrrefNm6cdHBwMx0+dOqXbt2+vXV1dtb29va5Zs6Zes2ZNunNXrlypq1Wrpm1tbbWzs7Nu1KiRjomJ0Vprff78ed2+fXvt7Oys7ezs9Msvv6zDwsIyjJ+UDgfDNmrUqAzvMSoqSnfu3Fk7OTlpJycn3bp1ax0REWEoHzVqlK5SpYqeN2+e9vT01BYWFvr27duP3XNefQ8Jkd8A4dqI/PHhQ0s5ZQQwKs1+d+BzpVQocBSorLU+D/gB85VSjsBlYBGQdoBlF2A+EAucBzpprfPP01MmoNJMUDd79mxOnDiBlZUVAL6+vlSqVInvv//+2S7u5gYjR3Kh/ads+2g1L/8+g/6Rw0jsP4o17wbwT5cgWo1pgHvJDCbJEwLg/ffhwIGcbbNGDfjvf42u7ujoiKOjI6tXr6Zhw4aGmTkeOnDgAEePHiUsLAyLTLpTVEYTRT7iww8/5KuvvuLHH39kyJAhfP/99zg4OPDuu+9mWN/JySnD43FxcbRq1YqxY8diZ2fH0qVL6dixI3///TdeXl7ExMTQpUsXxo8fj7+/P3FxcezevdtwflBQEHfv3mXTpk0UKlSIEydOZBrzpUuXaNKkCW3btmXIkCEZjp29c+cOTZs2pUGDBmzZsgVra2smTpxoGKJkb28PQGRkJIsXL2b58uVYW1s/9nMWQrx4cjRZ1VqPBkZnUuyYpt4QYMgTrnMWaJJ9kYm0bGxs8Pb2BiA5OZl+/fpRvHhxAO7fv8/bb7/Nv//9bxo1apSl61apXoAqGzpy82ZHFk04TvKMWbSPnY/T/MVErvSGCUHQrVvKGrBC5DEFChRg/vz59O/fn5CQEGrWrMmrr75KQEAAdevWJSIiAoCXX37ZcM7Nmzdxd3c37A8bNoxhw4Y9sZ2iRYtSvHhxzpw5A8DJkycpV66c4cOlsapXr0716tUN+8OHD2fNmjWsWLGCESNGEB0dzf379+nUqROlS5cGoGrVqob6586dw9/f33CNsmXLZtpWiRIlKFCgAI6OjpTIZIb1JUuWoLVm3rx5hqQ9ODiY4sWLs3btWt566y0AEhMTWbhwIa7m/N2zECJb5XTPqshjLCwsCAoKMuxHRkayf/9+w2ID165dY//+/fj5+WFp5FIchQtD97Fe6DH/Zdv6Lzk6MoyusdNh0CAYOpSYlr34rfxg2g2tROHCJrktkddkoYczN/n7+9OmTRu2bdvGrl27WL9+PZMmTeLLL7+kXLlyj9UvWLAgB1J7jFu3bp3uAasn0VobEjr9jGM24+Pj+fzzz1m7di2XLl3i/v373L171/BBtXr16jRr1oyqVavy+uuv06xZMzp16mQYb/ree+8xaNAg1q9fj5+fH2+++Sa1a9d+plgA9u3bR2RkpGFu6Ifu3LnD6dOnDfslS5aURFWIfEaG9oosqVixIqdPn6Z169YAhIWF0aJFC8NXgMb+sYWUpeYatXJgUHg/Cp3aDzt3Qvv2FF0RTPdxlTlQxJfg5is4GH7fJPcihCnY2trSvHlzPvvsM3bu3Enfvn0ZPXq0Ybqm48ePG+paWFhQvnx5ypcvj7W1tVHXv3btGlevXsXT0xP4/3+TWfm3BzBkyBCWL1/OmDFj2LJlCwcOHKBOnTqG61haWrJhwwY2bNiAt7c3c+fOpUKFChw8eBCAvn37EhkZSWAZpgmoAAAgAElEQVRgIBERETRo0IDRo0dnKYa0kpOTqVGjBgcOHEi3RUREMHDgQEO9h6v25TfmstSpqZhqOdKs/NyyEsOL/vswN5KsiixTShnG3PXv35/169dTuXJlIOUPYN26dUnO6hpySkH9+rBwIRtDo5hd7itKJ59h4G8BuLxSmlCP0fwwPZp797L7boQwrcqVK/PgwQO8vLyoVKkS33zzTZZn2khr0qRJWFhY0KFDBwC6du1KfHw806ZNy7D+jRs3Mjy+fft2evbsib+/P97e3pQsWTJdDyak/FuvX78+o0aNYu/evbz00kssXbrUUF6yZEkGDBjAsmXL+OKLLwgJCXnm+6pVqxanTp2iWLFihgT+4VakSJFnvu6LIi8udZoVplqONCs/t6zE8KL/PsyNJKviudja2tKiRQvD/iuvvEKLFi0Myezo0aP56aefsnTN1r1c6H/qYxIOnWZW27UcKlCT3he+oN07HpyqFQCbNiErDQhzc/36dXx9fVm0aBF///03kZGRLF++nG+++QY/Pz8KFy7M/PnzOX36NPXr1+enn34iIiKCY8eOMWfOHKKioh4bSnPjxg1iYmI4f/48mzZtonfv3nz99dd89dVXlC9fHoC6desydOhQPvroIz744AN27NjBuXPn2Lx5Mz169GDKlCkZxluxYkV++OEH9u/fz6FDh+jevTt37941lO/evZuxY8eyd+9ezp8/z+rVq7lw4YLhg+l7773H+vXrOXPmDAcOHEj3ofVZdOvWDVdXVzp06MCWLVuIjIxk69atfPjhh5w8efKZryuEyPtkzKrIVj169DC8TkxMZPHixSQkJNChQwe01mzbto1XX33VqPGtlapaUmlNG+Li2rB0ymkS/xdM9+i54LsCvLw40jiIS8174vtmYZmrTuQ6R0dH6tWrx5QpUzh16hT37t3D3d2drl27MmLECADq1KnD/v37GT9+PO+++y4xMTHY2dnh7e3Nl19+Sb9+/dJds3///kDKQ49ubm7Uq1ePzZs3P/Zw49dff42Pjw/Tp09n7ty5PHjwgLJly9KhQ4d0Y87Tmjx5Mn379uW1117D2dmZ999/P12yWrhwYXbs2MHUqVO5ceMGpUqVYuTIkXTv3h1I+dr+3Xff5cKFCxQsWBA/Pz8mTZr0zD8/e3t7tm7dyieffEJAQAA3b940LJjg7Oz8zNcVQuR96lkH5+dFPj4+Ojw8PLfDyFeSk5O5e/cu9vb27Nu3Dx8fH0JDQwkMDEz3kIjREhJg+XL0jBmoPXuIw4E1BbuR2C+ItsOrU7Soae5D5Jxjx45RqVKl3A5D5GEv4nvoSf+rfBH+jJvq/rJyXVPVFZlTSu3TWvs8rZ70RwmTsrCwMMyPWKVKFZYtW2ZY5nX58uXUqFGDqKgo4y9oZwc9e3J/627mvRPOzw6deeP2d/T6tgYnXBoyq9FiwnfIwFYhhBDiRSHJqsgxtra2BAQEGL7Sc3BwoFSpUri5uQGwYsUKwsLCjJqKx9oaAqfWptPNuWwNiybYazIu+jKDtnXDo2EpTnUeBufOmfR+hBAip+TFpU6zwlTLkWbl55aVGF7034e5kWEAwmy0bNmSuLg4tm/fDsCJEycoX7680fO3nj6ZzO/Dfsfz1xn4xa9GAbRpw9aqQbj1ep0KL8tns7zgRfwKV+QseQ8JkTfIMACR56xbt45Vq1YBcPfuXerWrct7771n9PnlKlgwYHlz/G7+gDp7Fj79lOTde2g0vhXKqyIhXpP45ft/eI5Zg4QQQgiRw4xOVpVS9kqpBkqpN5RSHdNupgxQ5B8WFhaGZV0tLCwICQkhMDAQgKioKHx8fNi1a9dTr6MUUKoUjB1LzJ8XmNU4jBj1EgNODKFJd3dWFg5kXtBemQ/PjOWnb3xE9pL3jhAvHqOSVaVUM+AcsB1YBaxIsy03WXQi37K2tuatt94yLN94+fJllFKGpR4PHTpEWFgY956ySsBLZawZtLkLla9t5bshf7OqUCCt4lcQOLMOF9xe4cZ/56fMMCDMhpWVFQnyOxHP6P79+xQokH2zMubFlYoyivfh9qisrNqU1VWmTLUilKnqCvNl1JhVpdQRYC8wTGsdbfKoTETGrL44PvroI2bMmMHly5dxdHTkypUrFCtWzLAYQWaSk2HTT7c4NWohLc7MoEz8UXB2Rgf2YZ3HIBr3LY+jYw7dhMjQrVu3uHz5Mu7u7tjZ2WV9ejORbyUnJ3Px4kVsbGwM39I8r7w4RZG5TNdkDnHkxd9ffmLsmFVjk9V4wFtrffqplc2YJKsvjuTkZE6cOGF4iKJZs2Y8ePCAzZs3G32NB/c1BXZuhRkzSF65CoukB/xm2YLTLYNo9FUbKlV9zkWpxTO7desWV65c4f79+7kdishjHBwcKFmy5FM/uBorLyY75pL4mUMcefH3l58Ym6wa+13JDuBlIE8nq+LFYWFhke5p3wEDBvDgwQMgZcxax44d6dWrl2FO14wUsFLQuDE0bsz+NZc48M4cWp4PptnPHTj3swezPQdRYlhfWvYsjpWVyW9JpFGoUCEKFSqU22EIIYQwA5l+9FRK1Xq4AbOAiUqpfkqpumnLUsuFyFVvvfUWXbt2BeDKlSucP3+eW7duARAXF8eSJUueOA7Sp50b/c6N5Hr4WWY1X8kZiwr0PzOMFv1K8muxbujtO+RjuBBCCJELMh0GoJRKBjTwtAFjWmudJ74vlWEA+cvD5VyXLFnC22+/zbZt22jYsCEJCQnY2Ng88WvCmzdhzYTjJM+YRUD8fOwSb4K3N/f6BrG7XDcatXZ84tdLQogXQ178GtlcvlI3hzjy4u8vP8mOeVbLAp6p/33S5pmFoN5RSoUrpe4ppeY/oV4vpdQ+pdQtpVSUUuobpVSBNOWblVJ3lVJxqdsJY2MQ+cfDB3PeeusttmzZwquvvgrAN998Q7ly5bhz506m5xYuDN3HetHj+n/h4kWYPRssLLB5bxA12rqzqOi/WTjsGDdu5MitCCFyyYu+UlFWVm3K6ipTploRylR1hfky9gGrRsBOrfWDR44XABporbca1VjKnKzJQAvATmvdO5N6g4HDwB7ABVgNLNdaf5VavhlYpLWeY0y7D0nPqoCUxQe2b9/OuHHjABg7dixubm707dv3ySdqzZoRe0j8djptE5ZhQyJbLJpy3DeIeuM7UN1HBrYKIYQQxsruFaw2AUUyOF44tcwoWutVWusfgetPqTdTa71Na52otb4IfA+8amw7QjxJ69atDYmq1pqNGzeye/duQ/nGjRszHt+qFO2+rEf7mwvZMDeK2eW+wiM5koG/BeDySmnW1B6d0gsrhBBCiGxjbLKqSBm/+qiiQHz2hZOpRsCRR46NV0pdU0rtUEo1yexEpdSA1KEH4VevXjVpkCLvUUqxZcsWpk2bBsCZM2d4/fXXmTp1KpAyRVZycnK6c6ysoF0fF/qf+pi7h04R3G4thwrUpO1fX0Dp0tCpE1eXbeLcWRkQJYQQQjyvJw4DUEqtTn3ZBvgNSLtckCVQFTimtW6ZpUaVGguUzGwYwCN1A4ExQA2t9bXUY3WBo0Ai0AWYllr+xKm1ZBiAeJqkpCQ2b95M5cqVcXNz47fffqNfv36sXbuWqlWrZnpeXBxYnT+NzfxgmDsX/vmHY3ixtWoQ5Ub3xPfNwpmO3xJCCCHyo+waBnA9dVNAbJr960AUKVNadX++UDOnlHoD+Apo9TBRBdBa79Fa39Za39NaLyBlHtjWpopD5B+Wlpb4+fnh5uYGgL29PTVr1qRcuXIArF69mmnTphnmdH3I0RFsKpeDb76BqCgW+C7glirMwMP/pn6nl1jqNJAFHxzk+hMHwAghRMbMYYlRUy5dag7LoppDDCJjxj5gNQqYqLXOlq/8jelZVUq1BBYCbbTWfz7ler8Av2it//eketKzKp5X37592bVrF0eOHEEpxeHDhylfvjy2traP1b1yBX4esw+7+TNpH7cYexLYqV7lfv8gGv/PH2xscuEOhBB5kTlM12TKaaDMYYopc4ghv8nW5VazS+rsAQWAUUBJoD/wIINZBnyB5cCbj840oJRyAuoCW4AHQGcgBKiltX7iFFaSrIrsEBsbi7OzM0lJSZQpU4a6deuyYsWKTOsnJcHGZbGc+2I+TY/PpCInwcUF+vXjfKuBuPiUxs4uB29ACJHnSLJqeuYQQ37z3MmqUiqSjB+qeozW2qi5VpVSo0lJVNP6HAglZQxqZa31eaXUJuA14G6aetu01q2UUi7AOsALSAKOAyO11huf1r4kqyI7JScn88cff+Dg4ED9+vW5ceMG9evXZ+LEibRp0ybDcy6cS6ZUxO8wYwasXk1SMmywakNUuyCajn+d8hVlYKsQ4nGSrJqeOcSQ3xibrBZ4Qtm0NK8dgQ+AP4FdqcfqA3WAScYGpbUeDYzOpNgxTb2mT7jGVeAVY9sUwlQsLCxo1qyZYf/atWt4eHjgmjrb9MmTJ9mwYQM9evQwrHNfqrQFlG4OzZsTf/wCS3xDaHNpNq1WreHUqnKEvDyYUiN68/rbRbHME+vCCSGEEKZl7JjV+UCE1nrcI8c/BaporU32kFV2kp5VkZMmT57M0KFDuXjxIq6ursTExODk5PTY+NbwnYmED1tF1a0zaKi3kYAtaxy6UHV6EJV7yecyIYT0rOYEc4ghv8nuRQE6AssyOL4caJ+VwITILz744ANOnjxp6Gl977338Pb25tEPiD4NrBm0uQuVr21lwYd/s6pQIK3iV1C5dx145RWYN4+okwnyP0sh8jFzWGLUlEuXmsOyqOYQg8iYsT2rl0gZFzrnkeP9gLFa6zwxsYP0rIrc9Mcff3Dx4kV69OgBQEBAAK+//jr9+/dPVy85GSLCb+EVvgimT4ejR4lVzqwu2gfrfw+i3X/K4+iYUQtCCCFE3pHdPavfAtOVUrOUUr1Tt1nA1NQyIcRT+Pr6GhLVO3fucOPGDcOyrvfv3yckJIR//vkHCwvwqlMIgoLg8GFOzdnMVuvmdL02hbc/q8Bup5YEt13N0UNJuXk7QgghRI4weuoqpdRbwHtApdRDx4ApWuuMhgeYJelZFeZGa41Sij/++AM/Pz9+/PFHOnTowJ07d7C0tMQmdS7We/dg3dxLXP96Di3PB1OSi5zDg41lB9Lpl744vSzfUwkhhMhbzHKe1dwmyaowV1prDh48SOXKlbG2tmbq1KmMGjWKo0ePUuKR5VP+3v+AncPW8PLG6TRN/h1tZYUKCICgIP7xakCRok94SkAIIYQwE9k9DEAIYUJKKWrUqIG1tTUAPj4+DBw40JCoTpgwgfHjxwPgXasAg9a/Sa1/fiPip2OooCD4+Wdo2JCoYjUIrhXMlp/j5IEs8Vxk6UnTM4clVIXIC560KMAtwFNrfU0pdZsnLBCgtS5koviylfSsiryqW7duJCYmsnz5cgDWrVtHvXr1KFKkSEqF+Hh2/TsMu9Dp1OAAtyjIaqde6MFBtBtaCSenXAxe5EkyjY/pmcN0VELkpuxYwaoXsERrfU8p1ZsnJ6sLnjXQnCTJqsjLkpKSsLS05J9//sHV1ZX333+fCRMmoLXm/v37WFtbE31Rs27UHpwXT6dtwjJsSGSLRVNOvR5En586oKytcvs2RB4hyZHpSbIq8jsZs5oBSVbFi0BrzYEDByhatCgeHh789ddfNGvWjB9++IFGjRoBcP8+rF94lZhxoTQ7PYuynAU3NxgwgKQ+/Xng6k7qs1tCZEiSI9OTZFXkd9k6ZlUp9alSqp5SShaAFCKXKaWoWbMmHh4eAFhbW9OqVSuqVq0KwMaNGxk37nN8O9vT/9TH3D10iovBa6FmTfjiC1TZ0mwo1Ik5Xf/g3Fn5KyeEEMK8GfuAVRtgC3BDKfVravJaX5JXIXJflSpVWLRokWH86rZt25g9e7ZhWdfEpMPYBzRIeQjr1Ck2en9I/cTN9Avz407ZygRXm8pvK2+SnJybdyGEEEJkLCvzrNoBDYHGQBPAB7gP7NBatzRVgNlJhgGI/CI+Ph4HBwe01nh7e+Ps7MzWrVsBSE7W7Nlyj4PDl1Fz9wzq6j3EY8/qQt1xGBJE+5HVczl6YQ5KlIDLlx8/7uoKMTE5H8+LKCs/Y/l9iBeRycasKqVKAE1J6W3tDNzXWts/U5Q5TJJVkd9orfnrr7+4c+cODRs25N69e1StWpURI0bQq1cvrlyBn7/Yh938mbSPX4w9CdCgAQQF8eCNThRwkIGtQgghTCO7x6wGKKVmKKWOAaeBAcApoDng/FyRCiFMRilFrVq1aNiwIQA3btzAx8eHkiVLAvDgQTRRrutofHIcWxdfJG7Mt3D1KnTvzj3XUsxzG8ayCedIXRVWCCGEyHFG9awqpZKBq8AkYJrW+o6pAzMF6VkVIr2wsDC6devGiRMnqFChApcuXcLW2hqnffvZFDCDxrdWA7DBqg0X2gbh+9XrlK8oa4kIIYR4ftk6DEAp1Z+UsaqNgYLANmAzsAn4S+eR+a8kWRXicTExMYaVsgYPHszSpUuJiYkhKcmaNTMucHtSCG0uzaYElzlFOTZVHETN/wXi06JoLkcuhBAiL8vWYQBa69la6+5a61KkPFj1E1AH2A1cz0JQ7yilwpVS95RS859S9z9KqRil1E2lVKhSyiZNWRml1Cal1B2l1HGlVDNjYxBCpFcizXqNAwYM4Ntvv8Xa2ho7O/hp/yfE/MuWqB3nmdU4jBj1Ev0jPqJm+5IQGAh798ocj8JkLC0zXmLU8jnnoTHVdcE8lkWVZVzFi8bo7/OUUhZKqbqAPxBAygNWACey0F40MBYIfUpbLYBPAD+gDOAJfJ6mShjwF1AUGA6sUEq5ZCEOIUQGatasSa9evQBITk7m4ZcmPg2sGbipM1vHdmX2u9uw6BMIK1ZAnTqcKfYKwfXmsfP3BElcRbbKbDq1551mzVTXhYyf2H/ScVPISgzmEK8QT2PsMIB1wKuAHbCflCEAm4FtWuv4LDeq1FigpNa6dybli4GzWuthqft+wPda6xJKqYrAIaCY1vp2avm21PJZT2pXhgEI8ewOHz5MtWrVCA0NJTAwkLtXrhA3ayFXRodSWR/lH5xZWywQq38Ppt1/yuPomNsRi7zOVKs2mXI1KHNYaUpWxhJ5RbYOAwD+JmWaKmetdT2t9Sda6/XPkqgaqQpwMM3+QcBVKVU0tezMw0Q1TXmVjC6klBqQOvQg/OrVqyYKV4gXX9WqVTl79iwBAQEArNy4kZLjhhP96w/M7r6FrTbNefva/3j7swrsdmpJcNvVRF9IyuWohRBC5HUFjKmktf7E1IE8whG4mWb/4euCGZQ9LHfP6EJa6xAgBFJ6VrM3TCHyl9KlSxte16xZkw8//BBfv/JYNK/I5JqH6LXmVZqeuUGr8yE0+7kDD+p7QNBA6Ns3ZfZyIYQQIovMdQ6aOKBQmv2Hr29nUPaw/DZCiBxTuXJlvvzySywsUv43cunSWWJtf6H/uc+4Hn6W4BaTuV/WA4YPR5cqxW/FuxLaZzsXo+QzoxBCCOOZa7J6BEi75mN14LLW+npqmadSquAj5UdyMD4hxCMmTJjAunXrAPCqmsTQXaN5p2JFOH6cqHZB+FxdR595r3GtVA2CawWz5ec4GRMnnsgik79QmR3P7etC5l8g5OQXC1mJwRziFeJpsrzc6nM1plQBUoYejAJKAv2BB1rrB4/UawnMB3yBS8BK4M+HwxGUUruB7cAIoBUwD6igtX7ioFR5wEqInBMZGYnWGk9PTyIjz1Lr5b4MLdWSVmcWU4MD3KIgq516weDBdPqsMra2uR2xEEKInJTdD1hllxFAAinTUnVPfT1CKeWhlIpTSnkAaK3XA9+QsujAudRtVJrrdCFlvtdY4Cug09MSVSFEzipbtiyenp4AWFpa0G1AJbr+8RbFo/Yzrt0PrC3QmoAbIXQfXwXrlk1TpsK6fz+XoxZCCGFucrRnNbdJz6oQ5mHGjBmMGjWW4LF/UnbT91Te9j9soqNJcnVjkd0ACn3Yn9b93bGxefq1hBBC5E3PvdyqUuo2YFQmq7V+9IEnsyTJqhDm4969e9ikZqO+jRtT8cwZhjp6U+b4LyRjwS/Wb3DZP4jm45pSuswTJoMUQgiRJxmbrD5p6qp3sjEeIYRIxyZNt+mcefO4ePEixWu+Rti3p7j0+Vf0TvyRYmErORbmRXDVIMp/3hO/joVzMWIhhBC5QYYBCCHMyu3bt/n4408o6/YGBX+5RM3dM6ir95BgYY9dv+4QFATVqz/9QkIIIczacw8DeBFJsipE3rNixVa+6TyfeXVuUeXgOkhI4LrXK6xweY/a4zvh86oMbBVCiLwoW5NVpZQ1MBx4G/AArNKWa60tnzHOHCXJqhB5U2xsLE5OTqgbN/i5c2cqbDxERWK4ggs/l+iHwwcDafdOaezscjtSIYQQxsruqavGAL2ASUAy8BEwHbgOBD1rkEIIYQxnZ2eUUuDsTKVZs1j99XRCOm1gr9Wr9Iz5mk5Dy7K5cHtm+6/nVERybocrhBAiGxnbsxoJDNZar0+dJaCG1vq0Umow4Ke17mTqQLOD9KwK8WJJSID+LadTe38Eb8ctpQSXuWhbkgLvdMH1k0+gaNHcDlEIIUQmsrtn1RU4mvo6DnBKfb0eeD3r4QkhxPOzs4NFW/7Ff25PIWrHef5bbwGn713HdeJEcHfn9Gu9mNpzE5cv53akQgghnpWxyep54KXU16eAFqmv65OyCpUQQuQqnwbWvL+rJ1WvRXF7xw50YB9cd6zi3YW+XCjxCsH15rHztzvko2dKhRDihWBssvoD4Jf6egrweerQgPnAHBPEJYQQz6RIkSIUbNAAZszg5+ADfOH6GbYkMHBPH7yal2S6XX++G3mEuLjcjlQIIYQxnmnqKqVUXeBVIEJrvTbbozIRGbMqRP507qxmw8htOIdNpUPSj1jxgOhqLYhq74NNx45Ur1Urt0MUQoh8J7unrmoE7NRaP3jkeAGggdZ66zNHmoMkWRUif7t3D36eE82d/82lW1wwKvoiV+zsOOU7gutv9KVeBxtcXJyefiEhhBDPLbuT1STATWt95ZHjRYErMs+qECLPefCAW99/j5o5m4J7dpCIFStow1/1WvP+8n64l1S5HaEQQrzQsns2AAVklNUWBeKzEpgQQpiFAgUo1KsXFr9vZ9GI44Q5DaI1m5iwewDXStXgv5X+S7umozl37nxuRyqEEPnaE3tWlVKrU1+2AX4D7qUptgSqAse01i1NFmE2kp5VIURmtIZt6+M5OjKMevumU4MD3KIg8f5dcPvifQ4lJaG1xtvbO7dDFUKIF0J29axeT90UEJtm/zoQBcwCuj9fqEIIkfuUgkatHBgU3o/iUfuZ228Xf5XugNuaBVClCsrPjwl1x7NvT8psfYmJibkcsRBC5A/GjlkdBUzUWufpr/ylZ1UIkWVXr8K8eSR8Ox27mPNE48YvJQcwm3+o86YN//vfhNyOUAgh8qRsHbOqtf5cax2vlPJRSnVWSjmkNuKQOiOAsUEVUUr9oJSKV0qdU0p1zaTeL0qpuDRbolLqUJrys0qphDTlG4yNQQghssTFBYYO5cqOM8xqu5ZDBWoSGPUF26Nm4DfzFHO6/sHJiHsMGjSIgwcP5na0QgjxwjEq0VRKuQKrgVdIedCqAnAGmAzcBd4zsr3pQCIpy7fWAH5WSh3UWh9JW0lr3eqR9jcDfzxyrXZa69+MbFcIIZ5LaU9LBq1pQ1xcG5ZOOcPdKcG0uzqXYmE/cmKpF4WsLnDZ1xeqV+f69etER0dTrVq13A5bCCHyPGNnA/gWiCHl6f87aY4vB1435gKpvbH+wEitdZzWejspCXCPp5xXBngNWGhkrEIIYTKOjvD2cE96X/6aiN+jmFlvAbbFC/PNvXiaBwbyoO9AvvD/AW/vJpw5cwaAZ1l8RQghRApjk1U/YLjWOvaR46cBDyOvURFI0lpHpDl2EKjylPN6Atu01pGPHP9eKXVVKbVBKVU9s5OVUgOUUuFKqfCrV68aGaoQQjyZUtDA15bBu3riEb0bwsNRb78NixYyZUt/dqiX2dh7F+E77vH+++/z5ptvStIqhBDPwNhk1Y6Ur+8f5ULKMABjOAI3Hzl2Eyj4lPN6AvMfOdYNKAOUBjYBvyqlMlx2RmsdorX20Vr7uLi4GBmqEEIYTymgdm2YM4e9P1wk2OtbiulrDNzWHY+GpagwLxnH6025ezdloYHJkyezc+fO3A1aCCHyCGOT1a1A7zT7WillCXwM/G7kNeKAQo8cKwTczuwEpVRDoASwIu1xrfUOrXWC1vqO1nr8/7V353FVlvn/x18fBFFxi8ld3Bol00kNc03DMinTtKyxUrNUNMiaZpqamnRarHFavt/6+c0lNVvUMhspUzO1hSzTcitNU3IBF3JfckFkuX5/nKMhggIC5yDv5+NxHsl1rvu6Pzcn8ON1X9f9AQ7hWSogIuJT7btfwrCfH6ZMwgYm3rGI5UEdiTkyjre/fpjVYbdw4qOP+PdzzzFv3jzAs0Rgw4YNPo5aRMR/5XUn/2PAV2Z2NRAM/A+e2/dVgI55HCMBCDSzxs65X7xtLYB15zhmIBDnnDt6nrEdnmfBioj4hcsaB3DZzK6kpHQlbvx2fnt5Incdm0S5W+ewp2FDdqWUZ/60/VS9bDMdOrRl5syZ3HHHHb4OW0TE7+T10VXrgSuBpcBCoByezVWtnHOb8zjGMSAOeNb7yKuOQC9y2ThlZuWBO8i2BMDM6plZRzMra2blzOxR4FJgSV7iEBEpTuXLwx1/C2Nw8ijK7d4GM2YQEBZG7VdG0mVAHXZ0HctfO06iRQvPXtUPPviA7t27s2/fPh9HLiLiH/L8jFTn3K/Avy7wfLHAFGAPnipYMc65dWbWCZjvnKuYpW9vPGtav8w2RiVgPHAZnvWyPwA3Oef2X2BsIiJFKkO/JRkAACAASURBVKBcWejbF/r2Zea/fuLkmPH0OvwOdyx5hxWXv87rbWLZde0lHD78G6GhoQDMmzePkJAQIiMjfRu8iIiPnLOClZlVAF7CkzgGAZ8BDznnSuQ/+VXBSkT8SWYmfDn7NzY9PY2Oa8bRnHUc4BLWt7mPa6bdD40b06ZNG8qVK8fixYsB2LNnD9WrV/dx5CIiF66wKlg9g2dj1TxgBnADnllNERG5QAEBcP2tlRn2YyyVE9cyecBXLA7uRoeVY6BJE4iK4u3b/s6Tj78DQEpKCo0bN+app57yceQiIsXnfDOrm/E8X3WG9+s2eNaGlnPOZRRPiIVHM6si4u9OnoSy+3+FyZPh9ddh506SqMeihsOo+kg/kk7MplOndrRp04Zt27YRExPDCy+8QPPmzX0duohIvhTWzGoY8PWpL5xz3wPpQO0LC09ERHJStixQqxaMHEn6pkQmRMWxOaAJQ7Y+yS3DG9NoxDJ+mnCS5J2OLVu2sHbtWkJCQgBYv3498fHxZGZm+vYiREQK0fmS1TKcXQwgnXxszBIRkYIJLBfI/Z/eSsSBRUwbsYH3Qh+gy4lPGPRmJ/bVbUHozA0krVtHw4YNAfi///s/evToQUpKCgDHjx8/1/AiIiXC+ZYBZAKLgNQszTcBXwGnfws6524pqgALk5YBiEhJ5hwsnn+M9f96j46rx3Jl5g9QqRIMHMiPHWKoHtmApKQ1tGvXDoDrrruOSy+9lJkzZ/o4chGRsxXWMoC3gWQ8j5k69ZoGbM/WJiIiRcwMru0eQsyKITQ8uAqWLoXevXETJ9Li7mb8Uvdmfhy5nR9XpOGco1evXtx4440AZGZmMnjw4NNPFRARKSnOeTvfOXdfcQUiIiJ5V6myQbt20K4dvz7yP8y57U26bRlP58/+TPJntXgzLJp6jw2le786AOzYsYMFCxbQpUsXAI4cOcLq1au55pprCAjIa+VtEZHip99QIiXE7t3TWbq0AfHxASxd2oDdu6f7OiTxE7VbVGPY5sc4sXYTE3rMZW1gK+7dPoqeD9ZnYeXb2fXuF9QLCyMpKYm+ffsCEBcXx7XXXsv3338PQEZGiXvAi4iUEkpWRUqA3buns3HjUFJTkwBHamoSGzcOVcIqZ2javAz3z7mZjgfn8f5zm5ha7RGuyYinZr/r4YorKDN2LOuWHCMzE26//XY++OAD2rZtC8AzzzxD+/btOXky+55aERHfUrIqUgJs2fIkmZln7uzOzDzOli1P+igi8WcVK8JdTzbi3t0vkL51B7zzDlSpAn/5C4271GFm1aHMGvkL1113O2YGwGWXXUbr1q0pW7YsAK+++ipz58715WWIiADneRrAxUZPA5CSKj4+AMjpZ9WIjNQzNSVvVk5cyS+PjOeWo+9SgRSWWgfWXBNL6//cTkSH4NP9MjIyaNq0Kddddx0TJkwAYNWqVbRs2VLrW0Wk0BTW0wBExA8EB9fLV7tITiKGRnDHocksfncnr1/+Cn9wexn2dX/COoYxte4TpG9KBKBMmTL8/PPPvPDCCwD88ssvREREMG7cOB9GLyKllZJVkRKgUaPnCQiocEZbQEAFGjV63kcRSUlVpgzceNclDPv5YcokbGDiHYv4Puga+iW/SGCTRtCzJxnzPiVxi1GlShUA6tSpw9SpU+nTpw8AixYtol27dmzZssWXlyIipYSSVZESoEaNfoSHTyQ4uD5gBAfXJzx8IjVq9PN1aFKCXdY4gKEzu3L94Tj2fp8ITz4Jy5dTpsdN0KQxk8JfZv60/QQHV6B///7UqlULgPT0dIKCgqhd21N5e8GCBcyaNUtlXkWkSGjNqoiI/O7kSeYP/ZCK74yjk1vMCYKZE3InRwfE0v3pNtSocfYhvXr1YvPmzaxduxYzY9u2bYSFhZ3evCUikpO8rllVsioiImc5cAA+/vdPBE4aT6/f3qESR1lhrdncLZa+cX2hwu/LUjIyMtixYwf169cnIyODevXq0b17dyZNmuTDKxARf6cNViIiUmChoXDvy825++BYvpu1kwl/Gks5l0LfBYOgbl145BGOrv6Fo0c9G7Lq168PeMq6jh49mgEDBgBw8OBBOnfuzDfffOPLyxGREqxYk1UzCzWzD83smJklmdndufR72szSzOxollejLO+3NLOVZnbc+9+WxXcVIv5P1a6ksAQEQNfbKnP/mlgqbV3Lb3O+gm7dYMwYKl7VhO+qRjGpx2x+/slTASsoKIh77rmHzp07A7Bt2zYOHjxIBe9M7ObNm4mLi1PxARHJs+KeWR0LnARqAP2A8WbWLJe+7zvnKmZ5bQEws7LAbGAacAnwNjDb2y5S6qnalRSV+g2Myj06w4wZsH07M/80iiYZ64me15sKf2rE5Eb/Zs7k3aSl/X5MixYtWLNmDa1atQLgnXfeoW/fvhw6dAiAw4cPU5qWo4lI/hVbsmpmIUAfYKRz7qhz7hvgY2BAPoeKBAKBV51zqc65MYAB1xVmvCIllapdSbGoWZM/rxnBgRVbmdAtjs0BTRiy9UmiosOYW/luFj31DXiTUDM7vdlq5MiRLFu2jOrVqwMwePBgOnbs6LPLEBH/V5wzq02ADOdcQpa2H4HcZlZ7mtkBM1tnZjFZ2psBa9yZ/xRfk9s4ZjbUzFaY2Yq9e/deSPwiJUJq6rZ8tYtciBYRgdy/4FYiDixi2ogNvBf6AF1OfMINz3aCFi1gwgR+23nkVN5KYGAgERERp4+/7bbbuOeee05/PWTIED766KPivgwR8WPFmaxWBA5nazsMVMqh70ygKVANiAb+ZWZ3FWAcnHMTnXOtnXOtq1WrVtDYRUoMVbsSX6hSBfqPCueefa/w06c7yZw4GQIDISaGwAZ1mB76INP+uZ7D2X5733333dx///2AZ0nAsmXLSEpKAiAtLY3Zs2eTmppa3JcjIn6kOJPVo0DlbG2VgSPZOzrn1jvnkp1zGc65b4H/B9ye33FESiNVuxJfMoNrokIIiB4MK1dy8qulzA/uzR2HJtJ/dDN+CO3C6zd8wI8r0s46tkqVKqxdu5YHHngAgIULF9K7d28WLVoEeJJXrW8VKX2KM1lNAALNrHGWthbAujwc6/CsS8Xb/0o782nTV+ZxHJGLnqpdid8wo2zndtxy8B0WvrGDiZe9QL3MRIZ99meqXV2fKfWe4qcFO7MdYgQGBgIQFRXF/PnziYqKAmDs2LE0adLk9OYsESkdirUogJnNwJN4DgFaAp8AHZxz67L16wUsBg4BVwMfAv90zr3t3fX/C/C/wAQ8ywQeBRo75875LBQVBRAR8a2ff8rgqyc+peGn47ghfT5WJgDr3RtiYznRvgvlyude9Wru3LnMmzeP8ePHA/Daa69RsWJF7r333mKKXkQKk19WsDKzUGAKcAOwH3jcOfeumXUC5jvnKnr7vQd0A4KBHcA4767/U+O0AiYDVwA/A4Odc6vPd34lqyIi/uHoUVj+/ha6JLwOb7wB+/ezpWw4nzWOpdHT93DdbVUJOM+9v8jISKpXr87MmTMBWLp0KREREZQtqycZipQEfpms+pqSVRERP3TiBDtf/YDt/xxHO7eMY1RgTqV+pA6OpceIlvzhDzkf5pzj+PHjhISEsGfPHmrXrs0TTzzBqFGjTq9tPXPFmIj4E5VbFRGRkqFcOeo8PoBGu5Yy5YGVzAm5i1uOTGPgq61IqNaR1ztPZ3/y2U8EMDNCQkIACA0N5eOPP2bQoEEArFy5kvDwcFatWlWslyIihU/JqkgeFFX50h9+6Ep8vJ1+/fBD10KJoSjLraqUqxSV6tVh0GtXccfhySx+dyevX/4Kf3B7GfZ1f0Jb1IUnnoDERDIyzj42MDCQ7t2707BhQwDS09OpX7/+6a+//PJLJk2apDKvIiWQlgGInMep8qVZq0IFBFS44B32P/zQlUOHPj+rvWrV62nZ8rMCx1BU8Rb12CI52ZSQycFZX3D18nEwezbOOT4Lvpmk7rFEjo7ij03yNucSExPDxx9/zLZt2yhTpgybN28mLCxM61tFfEhrVnOgZFUKYunSBqSmJp3VHhxcn/btEws8bnx87mvpIiPP/LnMTwxFFW9Rjy1yXtu3s2b4RKp/PIma7GYzjfiiSQx1R95Ht7v+QJkyuR/qnGPXrl3UqlUL5xzNmjWjUaNGzJ07t/jiF5EzaM2qSCHxh/Kl+YmhKOP1h++FlGJhYVw5exQ7lmxj/LUzSLa6RCc8SpcBdYirci9vxnyPy8x5AsbMqFWr1umvX3zxRR5++GEATpw4Qdu2bZkzZ06xXIaI5I+SVZHz8IfypfmJoSjj9YfvhUjrDmWJie9Ls31f8fbf1/LfKoO58dgs7pvQFmtzNUyZgjt2nNxuHJoZPXr0oGtXzxrxXbt2Ub58eSpU8FR+S05OZvLkyRw5osKIIv5AyarIeRRV+dKqVa/Pc3t+YijKcqsq5Sr+JDQUBr7UnLsPjOX7uJ1s/ttYOHECBg8mo3ZdplZ/hPee/YWjR889ToMGDYiPj+f66z0/ex999BHR0dHs2bMHgAMHDpCWdnZ5WBEpHlqzKpIHu3dPZ8uWJ0lN3UZwcD0aNXq+UDYUZd9kldPmqoLEUFTxFvXYIhfMOfj6a1YMHkeLTbMIIp3Py3Rjc1Qsnf5zM03/FJiHIRzr16+nWbNmAAwbNoyFCxeyadMmypxrYayI5Is2WOVAyaqISOmQmgqfTNnFvv9M5sZtrxPGDrYRxqKGwwh7ZgjdBtTI81gLFy4kISGB4cOHA3D//fcTERFBdHR0UYUvUipog5WIiJRawcFwa0xNopNGcGDFViZ0i2NTQDiDt47gunvD4O674ZtvyHVhaxbdunU7naimpaWxceNGkpOTAc8s7PTp0zl8+HCRXo9IaaaZVRERKRUOH4Y5L2/k5h0TuOTDN+HwYQ7U/RP/rRZL+LP96HxzJfJanTUzM5OAgAC+++472rVrx1tvvcXAgQM5efIkZkZQUFDRXozIRUAzqyIiIllUqQL9R4VzyZuvwM6dMHkyew4EMnR1DK161uHd0OFM/+c68jJJGhDg+euzTZs2LFu2jD59+gAwY8YM6tSpQ2JiYhFeiUjpomRVJA8SEmKJjw/0lkUNJCEhNte+RVVCNT9UElXkPEJCYPBgKiesZPLgpSws35vbD02i3+jm/BDahddv+ICf15z/CQBmRtu2balYsSIAf/zjH+nTpw/169cHYOLEibz44ouUpruYIoVNywBEziMhIZbk5PFntdeuHUOTJuPOaCuqEqr5oZKoIvmXlgafTt3Lr/9+kxs2j6chiRyvWosKD0VDdDTUrVugcQcMGMCuXbtYtGgRAIsXL6Zly5ZUrly5MMMXKZH0NIAcKFmVgoiPDwQycninDJGR6dn6Fk0J1fxQSVSRC/PzTxks+dcC7js+ljIL50NAAOsb92Jpq1i6/vs66jfI48JWr9TUVIKDgzl27Bg1atSgf//+TJgwAYCMjAw9DktKLa1ZFSk0OSWq52rPm6IqXaqSqCIXpmnzMgyJ606ZT+fBpk2cfPARamz8isHvdSWlYVMmNh/DZ/89RGZm3sYLDg4GoEKFCnz22Wf89a9/BWDLli3UrVuXzz8/+26MiPxOyarIeeU263FhsyFFVbpUJVFFClGjRgT97wskfL6D8e3f4ZBdwtB1f6H9HXWYWXUob//1Bw4ezNtQZka7du0IDw8HPDOuHTp0oEmTJgAsW7aMF154QWVeRbIp1mTVzELN7EMzO2ZmSWZ2dy79HjWzn8zsiJltNbNHs72faGYpZnbU+1pYPFcgpVHt2kPz3F5UJVTzQyVRRQqXGbTvUo6YbwfQaNdS3hy+kjkV7+KWI9MY+GorykZ2gOnTPZUI8qFp06bMmjWLsLAwABYtWsTo0aMJDPRU2UpISFDiKkIxr1k1s/fwJMiDgZbAPKCDc25dtn6PAZ8Ba4DLgIXAP5xzM7zvJwJDnHM516XMhdasSkF5NllNxHPrvwy1aw89a3PVKUVVQjU/VBJVpGhlZMCimQc5MfFteu8cB7/8ApdeyqdhQzhy1zB6DG9A+fL5H/fAgQOEhoYC0KlTJ1JSUtDfW3Kx8rsNVmYWAhwEmjvnErxtU4GdzrnHz3PsGDyxPuj9OhElqyIi4g8yM+GLLzg8ehwVv5iN4VgYdDM7esYSOTqKPzYp2E3Mb7/9liNHjhAVFUVGRgbt2rUjJiaGQYMGFfIFiPiGP26wagJknEpUvX4Emp3rIDMzoBOwLttb081sr5ktNLMWhRuqiIhIHgUEQNeulJ0bR9z/JDKl9ghapi1nSFx3LLwxk8NfYv60/WTkc09mhw4diIqKAuDQoUOEhYVRpUqV01+/+OKL7Nmzp7CvRsTvFOfMaifgA+dczSxt0UA/51zkOY57BugNtHHOpXrbOgKrAAP+4n1d7pw7lMPxQ4GhAPXq1YtISjr7kT4iIiKFacW3J1n+zw9pvngcndxiThBMwF13UvbhWLj6avJc1zUXcXFx9OnTh+XLl9O6dWsOHDhAUFAQlSpVKqQrECl6/jizehTI/hTkykCuq8fNbDhwD3DzqUQVwDm3xDmX4pw77pwbDRzCM/t6FufcROdca+dc62rVql3wRYiIiJxP6w5liYnvS7N9X/H239eyts1gys6ZBW3bktn6at6+dgpLPz9OQeeLbrvtNjZv3kxERAQAL730EnXr1uXo0aOFeBUi/iGwGM+VAASaWWPn3C/ethacfXsfADMbBDwOdHbO7TjP2A7PLKtcZIpyo1B+Nk19910zUlLWn/66fPkraNs2x/91iY8vC2Qt0xhEZOTJXPpWAFKytJQnMvJ4jn2XLKlDWlry76MG1aZjx5059i3K75s2b4nkXWgoDHypOTAWjvwHpk3jt+fHMnDVYA52fYRpl95H4IMx9PxbY7wVW/OsUaNGp/982223Ubt27dNlXx966CFq1KjBk08+WYhXI+IbxTaz6pw7BsQBz5pZiPdWfi9gava+ZtYP+Ddwg3NuS7b36plZRzMra2blvI+1uhRYUvRXIcXpVNlQTzUmR2pqEhs3Di2UOve/l1A9tYgsg+Tk8SQkxJ7VN3uiCpCSsp7vvjt7ufXZiSpAmrc9e9/siSpAirf9TNkTVYC0tGSWLKlzVt+i/L4V5dgiF71KlSAmhiPfrmVS/6+ID47izn3/x11PNeG7qlFM6jGbn9emn3+cHFx99dU8+OCDADjn2LdvHwcOHDj9/ltvvUVycnJuh4v4teIuChALlAf2AO8BMc65dWbWycyy3rt4DvgDsDzLs1QneN+rBIzH82SBncCNwE3Ouf3FdhVSLLZsefKM+vYAmZnH2bLlwmcKPDOqeWvPnqieuz17onqu9uyJau7t2RPVc7UX5fetKMcWKS3C6hnRUzvT/fAM5o7bzqR6o2iSsZ7oeb2pGtEI99zzsHt3gcc3M959911efvllALZu3cp9993H+++/D0B6erqWC0iJUqzJqnPugHOut3MuxDlXzzn3rrf9a+dcxSz9GjrngpxzFbO87ve+t845d6V3jD845653zul5VBehoi0bWjQlVP1BUX7fVMpVpPAEB8OtMTWJThrBgRVbmdAtDtc4HBs5AsLCONLzLqYM+oadOwq2sNW8m7gaNmxIQkICAwcOBGDBggXUrFmTVatWFdq1iBQllVsVv1W0ZUOLpoSqPyjK75tKuYoUjRYRgdy/4FZqr1sEGzbAAw8QuGg+g97sxP6wFky8agJfzT1S4A1ZjRs3Pl1soEGDBgwaNIjmzZsDMHXqVB599FHS0nK7MyTiW0pWxW8VZdnQ/JRQLV/+ihz75twelMsZc2rPrbzN2e1BQbVzHjWH9qL8vqmUq0gxCA+HV15h9ZydjI+YTDqBDF0dQ6uedXg3dDjT/7mOw4cLPnyzZs0YM2YMZct61tL/9NNPLF68mKAgz++pL7/8kl9//bUwrkSkUBRruVVfUwWrkkdPA/idngYgUjol73R88vT3VJk+jp4p71OOVH6uGUnTMbHQuzcE5faP5LxLT08nMDCQjIwMateuzTXXXMOsWbMAOHny5OnEVqQw+V25VX+gZFVEREqqtDT4dNo+fn1+CvccH0+5XxOhZk2Sooay8qpobh5Wl+DgCz/Pxo0bSU9Pp1mzZuzdu5fw8HDGjRvHnXfeeeGDi2Thj0UBREREpICCgqDnfZcydNNjlNu+CebNg4gIwt4exS1/acCiyn144+7PSUq8sEmo8PBwmjXzPJovNTWVPn36nF7funbtWv7xj3+ozKsUK82sioiIlFDOwfv/2UrKKxPoufcNLmU/GwhncbNYGj19D9fdVpWAQpyWmjx5Mg8//DDbtm0jNDSUhIQEKleuTM2aNc9/sEg2WgaQAyWrIiJyMXIOlsWf4IcnP6DVsnG0c8s4RgUSO/Sj2dhYaNmy0M519OjR05WyevXqxerVq0lKSsLMcM6dfmSWyPkoWc2BktWLm79s/MnPxq389BURyYs9e2Dus6uoOHU8d6RNx1JSoH17VrWLJfO222l9TblCO9eGDRvYunUrN910E845rrnmGnr27Mnjjz9eaOeQi5fWrEqp4i9lQPNTxjU/fUVE8qp6dRj02lXccWgStnMnvPIKbu8+rnplAPU7hfFWrSf478uJpORWRC8fLr/8cm666SbAs761adOm1KpV6/TXI0aMYOvWrRd+IinVNLMqF4WlSxt4E9UzBQfXp337xGKLIz4+kJyrYJUhMjK9wH1FRC7Eb4cyeS/6C2rPHkf3tNkYjoVBN7OjZyyRo6P4Y5PCn7tasmQJ1157LfPmzSMqKoqDBw9y8uRJatSoUejnkpJJM6tSqvhPGdD8lHG9eEu+ioh/qVw1gGEfdKXr4ThmvZzIlNojaJm2nCFx3bHwxmz/y0uwf3+hnrNjx44kJydz/fXXA57NWXXq1CE5Ofk8R4qcScmqXBT8pwxofsq4XrwlX0XEP5UvD39+JIwhO59lx5JtjL92BgdD6hI25jGoUwfuvZfPR3/Pnt2Fc9e1evXqBAYGAp7NWK+++iq1a3sq7z322GMMHz68UM4jFzclq3JR8JcyoPkp45qfviIiha11h7LExPel1eGvYO1aGDyYzP/O4vp/tmV7rauZ2G4KSz8/TmGtFmzSpMkZyWlGRgbp6b8veXrjjTfYuHFj4ZxMLipasyoXDT0NQETkwiSsPMLn902j09qxNGcdB6nK3EvvI+ihGHr8tTHeJ1YVukOHDlGjRg0ee+wxRo0ahXOOffv2Ua1ataI5ofgFPboqB0pWRUREzi8p0bFw5Ndc+sE4eqTOIoh0vgjsRvupsZS//Wbw3tovTLt37yYgIIBq1aqxdOlSOnXqxCeffEK3bt0K/VziH7TBSkRERAqkfgMjempnuh+ewdxx25lUbxRXBq2n/F29oVEjMp97ngXv7CYtrfDOWaNGjdMzqXXq1OHRRx+lXbt2AMTFxTF48GB+++23wjuhlBhKVkVERCRHwcFwa0xNopNGUHHPVvjwQ7j8cgJGjqDLwDDmVb6LKfd9zc4dhXuXtl69eowePZrKlSsDsG3bNpYvX366ctaXX37Jhg0bCvWc4r+0DEBERETy5auJG0l8YgK9DrxJVQ6zhj+xrFUsl4/qR6fulSiKiquZmZkEBHjm2K644gqqV69OfHw8AMePH6dChQrnOFr8kV8uAzCzUDP70MyOmVmSmd2dSz8zsxfMbL/39aJlKTZsZi3NbKWZHff+t/CKHouIiMg5XTs0nHv2vcKaT3YyPmIy6QQydHUMLXvU4eN6w2HdukI/56lEFeCLL77gtddeAzyJat26dRkzZkyhn1P8Q3EvAxgLnARqAP2A8WbWLId+Q4HeQAvgSqAHMAzAzMoCs4FpwCXA28Bsb7uIiIgUAzPofFMIMSsGU3PHSiYPWcaC8rdy867J0Lw5REZydMpMflxRiAtbvWrWrEnz5s0BOHHiBNHR0Vx99dUAJCYmEh0drTKvF5FiWwZgZiHAQaC5cy7B2zYV2Omcezxb32+Bt5xzE71fDwainXPtzKwb8CZQ13mDN7NtwFDn3KfnikHLAERERIpOWhqcTN5HyPtTYMIE2LqVX6nJ/LChXPJoNN2H1iU4uGhj+Pjjj+nfvz9r1qyhQYMGbNq0iYyMDMLDw4v2xJJveV0GUPjPnshdEyDjVKLq9SNwbQ59m3nfy9qvWZb31rgzs+w13vazklUzG4pnphYg1cx+Klj44mOXAvt8HYQUmD6/kk2fX8nlB5/dLtj+LDz0LDxUfGdt2LBh8Z2s6PjB51ek6uelU3EmqxWBw9naDgOV8tD3MFDRu241P+PgnZ09NUO7Ii8ZvPgffXYlmz6/kk2fX8mlz65k0+fnUZxrVo8ClbO1VQaO5KFvZeCodzY1P+OIiIiISAlWnMlqAhBoZo2ztLUActoyuM77Xk791gFXZn06AJ5NWIW/9VBEREREfKrYklXn3DEgDnjWzELMrCPQC5iaQ/d3gL+ZWR0zqw08ArzlfS8eTyH1h8ws2MyGe9u/yEMYEy/gEsS39NmVbPr8SjZ9fiWXPruSTZ8fxVwUwMxCgSnADcB+4HHn3Ltm1gmY75yr6O1nwAvAEO+hk4F/ZNn938rbdgXwMzDYObe62C5ERERERIpFqapgJSIiIiIlS3EXBRARERERyTMlqyIiIiLit0pFsmpmoWb2oZkdM7MkM7vb1zFJ3pjZcDNbYWapZvaWr+ORvPNugHzD+zN3xMxWm9lNvo5L8s7MppnZr2b2m5klmNmQ8x8l/sTMGpvZCTOb5utYJO/MLN77uR31vjb6OiZfKhXJKjAWOAnUAPoB482s2bkPET+RDDyHZ2OelCyBwHY8VeqqACOBmWbWwIcxSf6MBho45yoDtwDPmVmEj2OS/BkLLPd1EFIgw51zFb2vUl0r9qJPVs0sBOgDjHTOHXXOfQN8DAzwbWSSUPVALgAABoNJREFUF865OOfcR3ieHiEliHPumHPuaedconMu0zk3F9gKKNkpIZxz65xzqae+9L4u82FIkg9mdidwCPjc17GIXIiLPlkFmgAZzrmELG0/AppZFSlGZlYDz8+jCniUIGY2zsyOAxuAX4FPfByS5IGZVQaexfOccimZRpvZPjNbYmaRvg7Gl0pDsloROJyt7TBQyQexiJRKZhYETAfeds5t8HU8knfOuVg8vy874SnsknruI8RPjALecM5t93UgUiD/ABoBdfAUBphjZqX2rkZpSFaPApWztVUGjvggFpFSx8wC8FSqOwkMP0938UPOuQzvEqq6QIyv45FzM7OWQFfgFV/HIgXjnPvOOXfEOZfqnHsbWAJ093VcvhLo6wCKQQIQaGaNnXO/eNtaoFuRIkXOW43uDTybG7s759J8HJJcmEC0ZrUkiAQaANs8P4JUBMqY2RXOuat8GJcUnAPM10H4ykU/s+qcO4bn1tWzZhZiZh2BXnhmesTPmVmgmZUDyuD5ZVvOzErDP7IuFuOBpkBP51yKr4ORvDOz6mZ2p5lVNLMyZhYF3AV84evY5Lwm4vlHRUvvawIwD4jyZVCSN2ZW1cyiTv19Z2b9gM7AAl/H5isXfbLqFQuUB/YA7wExzjnNrJYMI4AU4HGgv/fPI3wakeSJmdUHhuH5y3JXlucF9vNxaJI3Ds8t/x3AQeBl4GHn3GyfRiXn5Zw77pzbdeqFZzncCefcXl/HJnkShOeRjXuBfcCDQG/nXKl91qo553wdg4iIiIhIjkrLzKqIiIiIlEBKVkVERETEbylZFRERERG/pWRVRERERPyWklURERER8VtKVkVERETEbylZFRHxA2Z2r5kdPU+fRDP7e3HFdC5m1sDMnJm19nUsInJxU7IqIuJlZm95EzBnZmlmtsXMXjazkHyOMbco4yxuF+M1iUjJobKVIiJn+gwYgKeKTCdgMhCCp5qTiIgUM82sioicKdVbpnK7c+5dYDrQ+9SbZnaFmc0zsyNmtsfM3jOzmt73ngYGAjdnmaGN9L73HzPbaGYp3tv5L5pZuQsJ1MyqmNlEbxxHzOyrrLflTy0tMLPrzewnMztmZl+aWcNs4zxhZru9fd8xs6fMLPF81+RV38wWmdlxM1tvZjdcyDWJiGSnZFVE5NxS8MyyYma1gMXAT0AboCtQEfjYzAKAl4GZeGZna3lf33rHOQYMApoCscCdwJMFDcrMDJgH1AF6AK28sX3hjfOUYOAJ77nbA1WBCVnGuRN4yhvLVcDPwN+yHH+uawJ4HhgDtACWAzPMrGJBr0tEJDstAxARyYWZtQHuBj73NsUAPzrn/pGlzz3AAaC1c+57M0vBOzubdSzn3KgsXyaa2b+BvwMjCxheF6AlUM05l+JtG2lmPfEsY3jR2xYIPOCc2+iN92XgTTMLcM5lAn8B3nLOTfb2H21mXYAm3riP5nRNnlwZgFecc3O8bf8E7vHG9U0Br0tE5AxKVkVEznSjd1d+IJ4Z1dnAg973IoDOuezavwz4PrdBzex24GHgj3hmY8t4XwUVAVQA9mZJHAHKeWM5JfVUouqVjOe6quJJsi8HJmUb+zu8yWoerMk2NkD1PB4rInJeSlZFRM60GBgKpAHJzrm0LO8F4Ln1ntPjo3bnNqCZtQNmAM8AfwUOAbfgucVeUAHec3bK4b3fsvw5Pdt7Lsvx2dsK4vT3xznnvImzlpiJSKFRsioicqbjzrlNuby3CvgzkJQtic3qJGfPmHYEdmZdCmBm9S8wzlVADSDTObflAsbZgGf97ZtZ2tpk65PTNYmIFAv961dEJO/GAlWA982srZk1MrOu3h35lbx9EoHmZhZuZpeaWRCQANQxs37eY2KAuy4wls+AJcBsM7vJzBqaWXsze8bMcpptzc3/A+41s0Fm1tjMHgPacuZsa07XJCJSLJSsiojkkXMuGc8saSbwKbAOTwKb6n2BZ/3nz8AKYC/Q0bsB6SXgVTxrPG8A/nWBsTigO/CF95wb8ezaD+f3taN5GWcGMAr4D7AaaI7naQEnsnQ765ouJHYRkfwwz+87ERERDzP7EAh0zvX0dSwiIlqzKiJSiplZBTyP5PoUz2asPkAv739FRHxOM6siIqWYmZUH5uApKlAe+AV40Tk33aeBiYh4KVkVEREREb+lDVYiIiIi4reUrIqIiIiI31KyKiIiIiJ+S8mqiIiIiPgtJasiIiIi4rf+P+agMxQcfV6FAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 792x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compute the slope and bias of each decision boundary\n",
    "w1 = -lin_clf.coef_[0, 0]/lin_clf.coef_[0, 1]\n",
    "b1 = -lin_clf.intercept_[0]/lin_clf.coef_[0, 1]\n",
    "w2 = -svm_clf.coef_[0, 0]/svm_clf.coef_[0, 1]\n",
    "b2 = -svm_clf.intercept_[0]/svm_clf.coef_[0, 1]\n",
    "w3 = -sgd_clf.coef_[0, 0]/sgd_clf.coef_[0, 1]\n",
    "b3 = -sgd_clf.intercept_[0]/sgd_clf.coef_[0, 1]\n",
    "\n",
    "# Transform the decision boundary lines back to the original scale\n",
    "line1 = scaler.inverse_transform([[-10, -10 * w1 + b1], [10, 10 * w1 + b1]])\n",
    "line2 = scaler.inverse_transform([[-10, -10 * w2 + b2], [10, 10 * w2 + b2]])\n",
    "line3 = scaler.inverse_transform([[-10, -10 * w3 + b3], [10, 10 * w3 + b3]])\n",
    "\n",
    "# Plot all three decision boundaries\n",
    "plt.figure(figsize=(11, 4))\n",
    "plt.plot(line1[:, 0], line1[:, 1], \"k:\", label=\"LinearSVC\")\n",
    "plt.plot(line2[:, 0], line2[:, 1], \"b--\", linewidth=2, label=\"SVC\")\n",
    "plt.plot(line3[:, 0], line3[:, 1], \"r-\", label=\"SGDClassifier\")\n",
    "plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\") # label=\"Iris-Versicolor\"\n",
    "plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\") # label=\"Iris-Setosa\"\n",
    "plt.xlabel(\"Petal length\", fontsize=14)\n",
    "plt.ylabel(\"Petal width\", fontsize=14)\n",
    "plt.legend(loc=\"upper center\", fontsize=14)\n",
    "plt.axis([0, 5.5, 0, 2])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "    from sklearn.datasets import fetch_openml\n",
    "    mnist = fetch_openml('mnist_784', version=1, cache=True)\n",
    "except ImportError:\n",
    "    from sklearn.datasets import fetch_mldata\n",
    "    mnist = fetch_mldata('MNIST original')\n",
    "\n",
    "X = mnist[\"data\"]\n",
    "y = mnist[\"target\"]\n",
    "\n",
    "X_train = X[:60000]\n",
    "y_train = y[:60000]\n",
    "X_test = X[60000:]\n",
    "y_test = y[60000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "rnd_idx = np.random.permutation(60000)\n",
    "X_train = X_train[rnd_idx]\n",
    "y_train = y_train[rnd_idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:931: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
       "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
       "     multi_class='ovr', penalty='l2', random_state=42, tol=0.0001,\n",
       "     verbose=0)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_clf = LinearSVC(random_state=42)\n",
    "lin_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.87"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "y_pred = lin_clf.predict(X_test)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train.astype(np.float32))\n",
    "X_test_scaled = scaler.transform(X_test.astype(np.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:931: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
       "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
       "     multi_class='ovr', penalty='l2', random_state=42, tol=0.0001,\n",
       "     verbose=0)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_clf = LinearSVC(random_state=42)\n",
    "lin_clf.fit(X_train_scaled, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9127"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = lin_clf.predict(X_test_scaled)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
